个人最常用的PostgreSQL命令整理
psql命令
列出所有数据库:
1 | psql -l |
进入指定数据库:
1 | psql -d my_db_name |
带用户名密码进入指定数据库:
1 | psql -h your_host_name_or_ip -p your_port -U username -W |
执行sql文件:
1 | psql -d my_db_name -f a.sql |
通过一条终端指令执行简单操作:
1 | psql -d my_db_name -c "\dt" |
上述指令可替代如下三条指令构成的操作序列:
1 | psql -d my_db_name |
单步执行SQL指令,每一步都要敲回车确认:
1 | psql -s |
查看版本号:
1 | psql -V |
数据库信息查看
查看有哪些用户:
1 | \du |
切换数据库:
1 | \c my_db_name |
查看有哪些数据库:
1 | \l |
查看当前数据库下有哪些表:
1 | \dt |
查看某个表的信息:
1 | \d my_table_name |
查看有哪些索引:
1 | \di |
查看有哪些表空间:
1 | \db |
退出psql:
1 | \q |
执行外部SQL文件:
1 | \i a.sql |
把后续执行结果写入外部文件,直到退出psql:
1 | \o output_file.txt |
查看可用指令列表:
1 | \? |
查看某个命令的语法帮助:
1 | \h create table |
数据库使用状态查看
查看数据库占用空间大小:
1 | select pg_database_size('my_test_db'); |
查看所有数据库占用空间的大小:
1 | select datname, pg_database_size(datname) AS size from pg_database; |
查看所有数据库占用空间大小,并以KB、MB等可读方式显示:
1 | select datname, pg_size_pretty(pg_database_size(datname)) as size from pg_database; |
查看表或索引大小:
1 | select pg_relation_size('my_table_or_index_name'); |
查看表的总大小,包括索引:
1 | select pg_size_pretty(pg_total_relation_size(my_table)); |
查看表空间大小:
1 | select pg_size_pretty(pg_tablespace_size('pg_default')); |
数据库、用户设置
创建用户:
1 | create user my_test_user with password 'my_password'; |
创建数据库:
1 | create database my_test_db; |
把数据库分配给用户:
1 | alter database my_test_db owner my_test_user; |
直接创建用户并设置属主:
1 | create database my_test_db_2 owner my_test_user; |
别忘了把权限赋予用户:
1 | grant all privileges on database my_test_db to my_test_user; |
如果用新创建的数据库用户登录报以下错误:psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "my_test_user"
这是因为,该机器上psql的连接建立于Unix Socket上默认使用peer authentication,必须要用和数据库用户相同的系统用户进行登录。
解决办法也简单,要么创建对应的操作系统用户my_test_user
后sudo su - my_test_user
再用psql -d my_test_db
登录,要么把登录认证方式从peer authentiction
改为md5
。
如果要收回权限,使用下面语句:
1 | revoke all on database my_test_db from my_test_user; |
删除数据库用户,使用下面语句:
1 | drop user my_test_user; |