1. 登录pg数据库
psql -h host -p port -U username -d database
host:数据库主机名或 IP 地址。
port:数据库端口号(默认为 5432)。
username:连接数据库所使用的用户名。
database:数据库名称。
2. 查看当前有什么数据库
使用 \l 查看数据库
[postgres@centos7 pgdata]$ psql
psql (15.1)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(3 rows)
3. 切换数据库
\c 切换数据库
postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
4. 切换scheam
SET search_path TO my_schema;
5. 展示详细信息
\d 可以展示每个匹配关系的详细信息,例如(表、视图、索引、序列)等
- 如果\d命令什么都不带,将列出数据库中的所有表
- \d后面跟表名,显示这个表的结构定义
- \d后面跟索引名,显示索引的信息
- 跟通配符模糊匹配表名
,例如“*”或“?”,- \d+,将显示比\d更详细的命令
包括:任何与表列关联的注释,以及表中出现的OID
6. 显示SQL已执行的时间
\timing on
db_test=# \timing on
Timing is on.
db_test=# select count(*) from dongsc.t1;
count
-------
0
(1 row)
Time: 0.296 ms
7. 列出当前数据库下所有schema
\dn
8. 显示所有的表空间
\db
9. 列出数据库中所有的角色或用户
\dg或du
\du和\dg命令等价,因为pg中用户和角色不区分
10. 显示表的权限分配情况
\dp 或\z
db_test=# \z t1
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+------+-------+-------------------+-------------------+----------
public | t1 | table | | |
(1 row)
11. 指定psql显示的字符集
就像oracle中的sqlplus依赖于NLS_LANG一样,psql也能够指定字符集,并且能够实时更改
postgres=# \encoding
UTF8
postgres=# \encoding gbk
postgres=# \encoding
GBK
12. 执行在外部文件中的SQL语句或命令
1、使用\i在psql内部执行
db_test=# \i test_dml.txt
id | name | addr
----+---------+--------
1 | dongsc | jinan
2 | dongsc2 | jinan2
(2 rows)
2、使用-x在shell命令行中执行
[postgres@centos7 scripts]$ psql -d db_test -f test_dml.txt
id | name | addr
----+---------+--------
1 | dongsc | jinan
2 | dongsc2 | jinan2
(2 rows)
13. 设置输出显示格式
\x
相当于mysql的\G
14. 导出数据库
pg_dump 是 PostgreSQL 自带的备份工具,可以用于导出数据库和表的数据和结构。
pg_dump -h host -p port -U username -d database -f database.sql
host:数据库主机名或 IP 地址。
port:数据库端口号(默认为 5432)。
username:连接数据库所使用的用户名。
database:要导出的数据库名称。
database.sql:导出的 SQL 脚本文件。
–inserts:将数据转储为INSERT命令,而不是COPY
如果只想导出数据库的结构而不包含数据,可以使用以下命令:
pg_dump -h host -p port -U username -d database -s -f database.sql
-s 参数表示只导出数据库的结构而不包括数据。
如果只想导出数据库的数据而不包含结构,可以使用以下命令:
pg_dump -h host -p port -U username -d database -a -f database.sql
-a 参数表示只导出数据而不导出表结构。
15. 导出表
pg_dump -h host -p port -U username -d database -t table_name -f table_name.sql
host:数据库主机名或 IP 地址。
port:数据库端口号(默认为 5432)。
username:连接数据库所使用的用户名。
database:要导出的数据库名称。
table_name:要导出的表名。
table_name.sql:导出的 SQL 脚本文件。
如果只想导出表的数据而不导出表结构,可以使用以下命令:
pg_dump -h host -p port -U username -d database -t table_name -a -f table_name.sql
-a 参数表示只导出数据而不导出表结构。
如果只想导出表的结构而不导出表数据,可以使用以下命令:
pg_dump -h host -p port -U username -d database -t table_name -s -f table_name.sql
-s 参数表示只导出结构而不包括数据。
如果想同时导出多张表,用多个-t 表名即可。
pg_dump -h host -p port -U username -d database -t table_a_name -t table_b_name -s -f table_name.sql
16. 将查询结果导出csv文件
copy (select * from test where create_time >= '2024-01-01') to '/tmp/data/test.csv' with csv header;
评论区