数据库:一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)

文章目录

PostgreSQL 备忘清单为您提供了常用的 PostgreSQL 命令和语句。

PostgreSQL 工作

入门

切换和连接

shell 复制代码
$ sudo -u postgres psql

列出所有数据库

shell 复制代码
postgres=# \l

连接到名为 postgres 的数据库

shell 复制代码
postgres=# \c postgres

断开

shell 复制代码
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 控制台中运行

Recon 观察

显示版本

sql 复制代码
SHOW SERVER_VERSION;

显示系统状态

sql 复制代码
\conninfo

显示环境变量

sql 复制代码
SHOW ALL;

列出用户

sql 复制代码
SELECT rolname FROM pg_roles;

显示当前用户

sql 复制代码
SELECT current_user;

显示当前用户的权限

sql 复制代码
\du

显示当前数据库

sql 复制代码
SELECT current_database();

显示数据库中的所有表

sql 复制代码
\dt

列出函数

sql 复制代码
\df <schema>

Databases 数据库

列出数据库

sql 复制代码
\l

连接到数据库

sql 复制代码
\c <database_name>

显示当前数据库

sql 复制代码
SELECT current_database();

创建数据库

sql 复制代码
CREATE DATABASE <database_name> WITH OWNER <username>;

删除数据库

sql 复制代码
DROP DATABASE IF EXISTS <database_name>;

重命名数据库

sql 复制代码
ALTER DATABASE <old_name> RENAME TO <new_name>;

Tables 表

列出当前数据库中的表

sql 复制代码
\dt
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;

全局列表

sql 复制代码
\dt *.*.
SELECT * FROM pg_catalog.pg_tables

列出表结构

sql 复制代码
\d <table_name>
\d+ <table_name>
SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';

创建表

sql 复制代码
CREATE TABLE <table_name>(
  <column_name> <column_type>,
  <column_name> <column_type>
);

创建表,主键自增

sql 复制代码
CREATE TABLE <table_name> (
  <column_name> SERIAL PRIMARY KEY
);

删除表

sql 复制代码
DROP TABLE IF EXISTS <table_name> CASCADE;

Permissions 权限

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

shell 复制代码
sudo su - postgres
psql

授予 对数据库的所有权限

sql 复制代码
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;

授予数据库连接权限

sql 复制代码
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;

授予架构权限

sql 复制代码
GRANT USAGE ON SCHEMA public TO <user_name>;

授予函数权限

sql 复制代码
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;

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

sql 复制代码
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;

在表上授予权限

sql 复制代码
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;

授予对表的选择权限

sql 复制代码
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;

Columns 列

添加栏目

sql 复制代码
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];

更新栏

sql 复制代码
ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];

删除列

sql 复制代码
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;

将列更新为自增主键

sql 复制代码
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;

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

sql 复制代码
INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);
INSERT INTO <table_name> (<column1_name>,<column2_name>)
VALUES ( <value1>,<value2> );

Data 数据

选择 所有数据

sql 复制代码
SELECT * FROM <table_name>;

读取一行数据

sql 复制代码
SELECT * FROM <table_name> LIMIT 1;

搜索数据

sql 复制代码
SELECT * FROM <table_name> WHERE <column_name> = <value>;

插入 数据

sql 复制代码
INSERT INTO <table_name> VALUES( <value_1>, <value_2> );

更新 数据

sql 复制代码
UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;

删除 所有数据

sql 复制代码
DELETE FROM <table_name>;

删除特定数据

sql 复制代码
DELETE FROM <table_name>
WHERE <column_name> = <value>;

Users 用户

列出角色

sql 复制代码
SELECT rolname FROM pg_roles;

创建用户

sql 复制代码
CREATE USER <user_name> WITH PASSWORD '<password>';

删除用户

sql 复制代码
DROP USER IF EXISTS <user_name>;

更改 用户密码

sql 复制代码
ALTER ROLE <user_name> WITH PASSWORD '<password>';

Schema

列出 Schemas

sql 复制代码
\dn
SELECT schema_name FROM information_schema.schemata;
SELECT nspname FROM pg_catalog.pg_namespace;

创建架构

sql 复制代码
CREATE SCHEMA IF NOT EXISTS <schema_name>;

删除模式

sql 复制代码
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 ... 导入/导出表 另见: [复制](#:- - \copy ... 导入/导出表 另见: 复制 \echo [STRING] 打印字符串 \i FILE 执行文件 \o [FILE] 将所有结果导出到文件 \qecho [STRING] 输出流的字符串)
\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 备份所有数据库

shell 复制代码
$ pg_dumpall -U postgres > all.sql

使用 pg_dump 备份数据库

shell 复制代码
$ pg_dump -d mydb -f mydb_backup.sql
  • -a 只转储数据,而不是模式(schema)
  • -s 只转储模式,不转储数据
  • -c 在重新创建之前删除数据库
  • -C 还原前创建数据库
  • -t 仅转储命名表
  • -F 格式(c:自定义,d:目录,t:tar)

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

恢复

使用 psql 恢复数据库

shell 复制代码
$ psql -U user mydb < mydb_backup.sql

使用 pg_restore 恢复数据库

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

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

远程访问

获取 postgresql.conf 的位置

shell 复制代码
$ psql -U postgres -c 'SHOW config_file'

附加到 postgresql.conf

shell 复制代码
listen_addresses = '*'

附加到 pg_hba.conf(与 postgresql.conf 相同的位置)

shell 复制代码
host  all  all  0.0.0.0/0  md5
host  all  all  ::/0       md5

重启 PostgreSQL 服务器

shell 复制代码
$ sudo systemctl restart postgresql

导入/导出 CSV

将表格导出为 CSV 文件

sql 复制代码
\copy table TO '<path>' CSV
\copy table(col1,col1) TO '<path>' CSV
\copy (SELECT...) TO '<path>' CSV

将 CSV 文件导入表格

sql 复制代码
\copy table FROM '<path>' CSV
\copy table(col1,col1) FROM '<path>' CSV

另见:复制

跨版本升级

pg_upgrade 跨版本升级

shell 复制代码
$ /usr/lib/postgresql/16/bin/pg_upgrade \
  -b /usr/lib/postgresql/15/bin \
  -B /usr/lib/postgresql/16/bin \
  -d /var/lib/postgresql/15/main \
  -D /var/lib/postgresql/16/main \
  -o " -c config_file=/etc/postgresql/15/main/postgresql.conf" \
  -O " -c config_file=/etc/postgresql/16/main/postgresql.conf"
  • -b 旧版本二进制文件目录
  • -B 新版本二进制文件目录
  • -d 旧版本数据目录
  • -D 新版本数据目录
  • -o 旧版本主配置文件
  • -O 新版本主配置文件
  • -ccheck,不执行升级,可先加-c检查是否有报错,没有报错再运行升级

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

相关推荐
科技小花26 分钟前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸27 分钟前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain29 分钟前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希1 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神1 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员1 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java1 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿2 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴2 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU2 小时前
三大范式和E-R图
数据库