PostgreSQL最常用的函数-查询(最全)

Posted huang714

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL最常用的函数-查询(最全)相关的知识,希望对你有一定的参考价值。

基本

切换和连接

$ sudo -u postgres psql

列出所有数据库

postgres=# \\l

连接到名为 postgres 的数据库

postgres=# \\c postgres

断开

postgres=# \\q

postgres=# \\!

psql 命令

参数

示例

说明

[-d] <database>

psql -d mydb

连接到数据库

-U

psql -U john mydb

以特定用户身份连接

-h -p

psql -h localhost -p 5432 mydb

连接到主机/端口

-U -h -p -d

psql -U admin -h 192.168.1.5 -p 2506 -d mydb

连接远程 PostgreSQL

-W

psql -W mydb

强制密码

-c

psql -c '\\c postgres' -c '\\dt'

执行 SQL 查询或命令

-H

psql -c "\\l+" -H postgres > database.html

生成 HTML 报告

-l

psql -l

列出所有数据库

-f

psql mydb -f file.sql

从文件执行命令

-V

psql -V

打印 psql 版本

获得帮助

\\h

SQL 命令语法帮助

\\h DELETE

DELETE SQL 语句语法

\\?

PostgreSQL 命令列表

在 PostgreSQL 控制台中运行

PostgreSQL 工作

Recon 观察

显示版本

SHOW SERVER_VERSION;

显示系统状态

\\conninfo

显示环境变量

SHOW ALL;

列出用户

SELECT rolname FROM pg_roles;

显示当前用户

SELECT current_user;

显示当前用户的权限

\\du

显示当前数据库

SELECT current_database();

显示数据库中的所有表

\\dt

列出函数

\\df <schema>

Databases 数据库

列出数据库

\\l

连接到数据库

\\c <database_name>

显示当前数据库

SELECT current_database();

创建数据库

CREATE DATABASE <database_name> WITH OWNER <username>;

删除数据库

DROP DATABASE IF EXISTS <database_name>;

重命名数据库

ALTER DATABASE <old_name> RENAME TO <new_name>;

Tables

列出当前数据库中的表

\\dt

SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;

全局列表

\\dt *.*.

SELECT * FROM pg_catalog.pg_tables

列表表架构

\\d <table_name>

\\d+ <table_name>

SELECT column_name, data_type, character_maximum_length

FROM INFORMATION_SCHEMA.COLUMNS

WHERE table_name = '<table_name>';

创建表

CREATE TABLE <table_name>(

  <column_name> <column_type>,

  <column_name> <column_type>

);

创建表,主键自增

CREATE TABLE <table_name> (

  <column_name> SERIAL PRIMARY KEY

);

删除表

DROP TABLE IF EXISTS <table_name> CASCADE;

Permissions 权限

成为 postgres 用户,如果您有权限错误

sudo su - postgres

psql

授予 对数据库的所有权限

GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;

授予数据库连接权限

GRANT CONNECT ON DATABASE <db_name> TO <user_name>;

授予架构权限

GRANT USAGE ON SCHEMA public TO <user_name>;

授予函数权限

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;

授予在所有表上选择、更新、插入、删除的权限

GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;

在表上授予权限

GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;

授予对表的选择权限

GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;

Columns

添加栏目

ALTER TABLE <table_name> IF EXISTS

ADD <column_name> <data_type> [<constraints>];

更新栏

ALTER TABLE <table_name> IF EXISTS

ALTER <column_name> TYPE <data_type> [<constraints>];

删除列

ALTER TABLE <table_name> IF EXISTS

DROP <column_name>;

将列更新为自增主键

ALTER TABLE <table_name>

ADD COLUMN <column_name> SERIAL PRIMARY KEY;

使用自动递增的主键插入表中

INSERT INTO <table_name>

VALUES (DEFAULT, <value1>);

INSERT INTO <table_name> (<column1_name>,<column2_name>)

VALUES ( <value1>,<value2> );

Data 数据

选择 所有数据

SELECT * FROM <table_name>;

读取一行数据

SELECT * FROM <table_name> LIMIT 1;

搜索数据

SELECT * FROM <table_name> WHERE <column_name> = <value>;

插入 数据

INSERT INTO <table_name> VALUES( <value_1>, <value_2> );

更新 数据

UPDATE <table_name>

SET <column_1> = <value_1>, <column_2> = <value_2>

WHERE <column_1> = <value>;

删除 所有数据

DELETE FROM <table_name>;

删除特定数据

DELETE FROM <table_name>

WHERE <column_name> = <value>;

Users 用户

列出角色

SELECT rolname FROM pg_roles;

创建用户

CREATE USER <user_name> WITH PASSWORD '<password>';

删除用户

DROP USER IF EXISTS <user_name>;

更改 用户密码

ALTER ROLE <user_name> WITH PASSWORD '<password>';

Schema

列出 Schemas

\\dn

SELECT schema_name FROM information_schema.schemata;

SELECT nspname FROM pg_catalog.pg_namespace;

创建架构

CREATE SCHEMA IF NOT EXISTS <schema_name>;

删除模式

DROP SCHEMA IF EXISTS <schema_name> CASCADE;

PostgreSQL 命令

\\d <table>

描述表

\\d+ <table>

详细描述表格

\\dt

列出当前模式中的表

\\dt *.*

列出所有模式中的表

\\dt <schema>.*

列出架构的表

\\dp

列出表访问权限

\\det[+]

列出外部表

查询缓冲区

\\e [FILE]

编辑查询缓冲区(或文件)

\\ef [FUNC]

编辑函数定义

\\p

显示内容

\\r

重置(清除)查询缓冲区

\\s [FILE]

显示历史记录或保存到文件

\\w FILE

将查询缓冲区写入文件

信息

\\l[+]

列出所有数据库

\\dn[S+]

列出架构

\\di[S+]

列出索引

\\du[+]

列出角色

\\ds[S+]

列出序列

\\df[antw][S+]

列出函数

\\deu[+]

列出用户映射

\\dv[S+]

列表视图

\\dl

列出大对象

\\dT[S+]

列出数据类型

\\da[S]

列出聚合

\\db[+]

列出表空间

\\dc[S+]

列出转化

\\dC[+]

列出演员表

\\ddp

列出默认权限

\\dd[S]

显示对象描述

\\dD[S+]

列出域

\\des[+]

列出国外服务器

\\dew[+]

列出外部数据包装器

\\dF[+]

列出文本搜索配置

\\dFd[+]

列出文本搜索词典

\\dFp[+]

列出文本搜索解析器

\\dFt[+]

列出文本搜索模板

\\dL[S+]

列出程序语言

\\do[S]

列出运算符

\\dO[S+]

列出排序规则

\\drds

列出每个数据库的角色设置

\\dx[+]

列出扩展

S:显示系统对象,+:附加细节

连接

\\c [DBNAME]

连接到新数据库

\\encoding [ENCODING]

显示或设置客户端编码

\\password [USER]

更改密码

\\conninfo

显示信息

格式化

\\a

在未对齐和对齐之间切换

\\C [STRING]

设置表格标题,如果没有则取消设置

\\f [STRING]

显示或设置未对齐的字段分隔符

\\H

切换 HTML 输出模式

\\t [on|off]

仅显示行

\\T [STRING]

设置或取消设置 HTML <table> 标签属性

\\x [on|off]

切换扩展输出

输入输出

\\copy ...

导入/导出表 另见: 复制

\\echo [STRING]

打印字符串

\\i FILE

执行文件

\\o [FILE]

将所有结果导出到文件

\\qecho [STRING]

输出流的字符串

变量

\\prompt [TEXT] NAME

设置变量

\\set [NAME [VALUE]]

设置变量 (如果没有参数,则列出所有变量)

\\unset NAME

删除变量

杂项

\\cd [DIR]

更改目录

\\timing [on|off]

切换时间

\\! [COMMAND]

在shell中执行

\\! ls -l

在shell中列出所有

大对象

  • \\lo_export LOBOID FILE
  • \\lo_import FILE [COMMENT]
  • \\lo_list
  • \\lo_unlink LOBOID

各种各样的

备份

使用 pg_dumpall 备份所有数据库

$ pg_dumpall -U postgres > all.sql

使用 pg_dump 备份数据库

$ pg_dump -d mydb -f mydb_backup.sql

  • -a 只转储数据,而不是模式(schema)
  • -s 只转储模式,不转储数据
  • -c 在重新创建之前删除数据库
  • -C 还原前创建数据库
  • -t 仅转储命名表
  • -F 格式(c:自定义,d:目录,t:tar)

使用 pg_dump -? 获取完整的选项列表

恢复

使用 psql 恢复数据库

$ psql -U user mydb < mydb_backup.sql

使用 pg_restore 恢复数据库

$ pg_restore -d mydb mydb_backup.sql -c

  • -U 指定数据库用户
  • -c 在重新创建之前删除数据库
  • -C 还原前创建数据库
  • -e 如果遇到错误退出
  • -F 格式(c:自定义,d:目录,t:tar,p:纯文本sql(默认))

使用 pg_restore -? 获取完整的选项列表

远程访问

获取 postgresql.conf 的位置

PostgreSQL 谁堵塞了谁(锁等待检测)

22、查询没有使用过的大于1MB的索引 top 10 (注意, PK、UK如果只是用于约束, 可能不会被统计计数,但是不能删掉)

select * from dba.top10notusedidx;

23、查询没有使用过的大于1MB的表 top 10

select * from dba.top10notusedtab; 

24、查询热表top 10

select * from dba.top10hottab;  

25、查询大于1MB的冷表top 10

select * from dba.top10coldtab;   

26、查询热索引top 10

select * from dba.top10hotidx;  

27、查询大于1MB的冷索引top 10(注意, PK、UK如果只是用于约束, 可能不会被统计计数,但是不能删掉)

select * from dba.top10coldidx; 

28、查询数据库freeze风暴预测

select * from dba.v_freeze;

select * from dba.v_freeze_stat;

select * from dba.v_freeze_stat_detail;

查询top 20的大表大freeze剩余年龄。

select * from dba.top20freezebigtable;

– 结合dba.tps, 可以通过remain_ages_xid/dba.tps估算每个表还有多久会发生freeze.

call dba.tps();

29、查询RO节点读与replay冲突次数, 建议高频恢复中的ro节点不要跑长sql。

select * from  dba.ro_conflicts;

30、DBA在RO 节点人为执行SQL前, 建议设置sql超时, 避免长时间跑 SQL, 导致不必要的replay延迟和 conflict cancel statement

set statement_timeout ='1s';
set lock_timeout='10ms';

31、RO 节点的conflict容忍时间最长设置, 默认为5 min

show max_standby_streaming_delay ;
 max_standby_streaming_delay 
-----------------------------
 5min
(1 row)

32、清理数据库stat计数器

\\df *.*reset*
                                              List of functions
   Schema   |                  Name                  |     Result data type     | Argument data types | Type 
------------+----------------------------------------+--------------------------+---------------------+------
 pg_catalog | pg_replication_origin_session_reset    | void                     |                     | func
 pg_catalog | pg_replication_origin_xact_reset       | void                     |                     | func
 pg_catalog | pg_stat_get_bgwriter_stat_reset_time   | timestamp with time zone |                     | func
 pg_catalog | pg_stat_get_db_stat_reset_time         | timestamp with time zone | oid                 | func
 pg_catalog | pg_stat_reset                          | void                     |                     | func
 pg_catalog | pg_stat_reset_shared                   | void                     | text                | func
 pg_catalog | pg_stat_reset_single_function_counters | void                     | oid                 | func
 pg_catalog | pg_stat_reset_single_table_counters    | void                     | oid                 | func
 public     | pg_stat_statements_reset               | void                     |                     | func
(9 rows)

33、在standby节点执行, 检查当前standby节点接收wal的速度

call dba.wal_receive_bw();

34、在standby节点执行, 检查当前standby节点replay wal的速度

call dba.wal_replay_bw();

以上是关于PostgreSQL最常用的函数-查询(最全)的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 常用函数

PostgreSQL查询SQL的语法分析(1)——词法分析

PostgreSQL DBA最常用SQL

PostgreSQL DBA最常用SQL

PostgreSQL DBA最常用SQL

PostgreSQL DBA最常用SQL