PSQL 是 PostgreSQL 自带的命令行客户端,就好比 MySQL 的 mysql -h -p 客户端一样,不经常用,怕忘记,在此对比 MySQL 记录下。
列出所有的数据库:\l
db1-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
db1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
db1-#
选择数据库:\c xxx
db1-# \c db1;
You are now connected to database "db1" as user "postgres".
查询结构信息,PG 这里使用 \d 可以查看 表、视图、索引、序列 的信息。使用 \d+ 可以拿到更详细信息。
db1-# \d
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+----------
public | pgbench_accounts | table | postgres
public | pgbench_branches | table | postgres
public | pgbench_history | table | postgres
public | pgbench_tellers | table | postgres
(4 rows)
db1-# \d pgbench_accounts
Table "public.pgbench_accounts"
Column | Type | Collation | Nullable | Default
----------+---------------+-----------+----------+---------
aid | integer | | not null |
bid | integer | | |
abalance | integer | | |
filler | character(84) | | |
Indexes:
"pgbench_accounts_pkey" PRIMARY KEY, btree (aid)
db1-# \d pgbench_accounts_pkey
Index "public.pgbench_accounts_pkey"
Column | Type | Key? | Definition
--------+---------+------+------------
aid | integer | yes | aid
primary key, btree, for table "public.pgbench_accounts"
如果只想显示匹配的表,可以使用 “\dt” 命令。
如果只想显示索引,可以使用 “\di” 命令。
如果只想显示序列,可以使用 “\ds” 命令。
如果只想显示视图,可以使用 “\dv” 命令。
如果想显示函数,可以使用 “\df” 命令。
PSQL 默认执行 SQL 时不会显示耗时,可以使用命令开启:
db1=# select count(*) from pgbench_accounts;
count
---------
5000000
(1 row)
db1=# \timing on
Timing is on.
db1=#
db1=#
db1=# select count(*) from pgbench_accounts;
count
---------
5000000
(1 row)
Time: 212.943 ms
使用 \dg 或者 \du 可以查询用户信息
db1=# \dg
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
db1=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
db1=# \encoding utf8;
有时查询字段很多,几乎看不清,我们使用 \G 可以行转列
db1=# select * from pgbench_accounts limit 4;
aid | bid | abalance | filler
-----+-----+----------+--------------------------------------------------------------------------------------
1 | 1 | 0 |
2 | 1 | 0 |
3 | 1 | 0 |
4 | 1 | 0 |
(4 rows)
Time: 0.479 ms
db1=# \x
Expanded display is on.
db1=# select * from pgbench_accounts limit 4;
-[ RECORD 1 ]----------------------------------------------------------------------------------
aid | 1
bid | 1
abalance | 0
filler |
-[ RECORD 2 ]----------------------------------------------------------------------------------
aid | 2
bid | 1
abalance | 0
filler |
-[ RECORD 3 ]----------------------------------------------------------------------------------
aid | 3
bid | 1
abalance | 0
filler |
-[ RECORD 4 ]----------------------------------------------------------------------------------
aid | 4
bid | 1
abalance | 0
filler |
Time: 0.545 ms
db1=#
MySQL 中 source 可以执行外部 SQL 文件 PG 可以使用 \i 文件名 执行外部 SQL 命令。
也可以使用 psql -f 文件名 执行外部 SQL 文件。
MySQL 可以使用 eidt 进入编辑模式,PG 使用 \e 即可。