PostgreSQL 备忘单

2021-08-31 14:37 更新

psql -U john mydbPostgreSQL的小抄为您提供了常见的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 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>

数据库

列出数据库

\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>;

列出当前数据库中的表

\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;

权限

成为 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>;

添加列

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> );

数据

[选择](http://www.postgresql.org/docs/current/static/sql-select.html]所有数据

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>;

用户

列出角色

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>';

模式

列出模式

\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   只转储数据,不转储模式
  •   -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 的位置

$ psql -U postgres -c 'SHOW config_file'

附加到 postgresql.conf

listen_addresses = '*'

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

host  all  all  0.0.0.0/0  md5
host  all  all  ::/0       md5

重启 PostgreSQL 服务器

$ sudo systemctl resatart postgresql

导入/导出 CSV

将表格导出为 CSV 文件

\copy table TO '<path>' CSV
\copy table(col1,col1) TO '<path>' CSV
\copy (SELECT...) TO '<path>' CSV

将 CSV 文件导入表

\copy table FROM '<path>' CSV
\copy table(col1,col1) FROM '<path>' CSV

另见:复制

另见


以上内容是否对您有帮助:
前端开发就业
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号