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最常用的函数-查询(最全)的主要内容,如果未能解决你的问题,请参考以下文章