[PSQL介绍]
psql是一个PostgreSQL的基于终端的前端(相当于Oracle数据库的SQLPLUS)。它让你能交互式地键入查询,把它们发送给PostgreSQL,并且查看查询结果。此外,它还提供了一些元命令和多种类似Shell的特性来实现书写脚本,以及对大量任务的自动化作业。
[PSQL常用命令]
1.查询当前数据库
psql -l
2.数据库登录
psql -h <hostname or ip> -p <端口> [数据库] [用户]
※1 如果我们需要在已经登录的状态切换到其他用户或数据库,可以参考如下命令:
postgres=# \c <数据库> <切换用户>
※2 通常我们会通过用户环境变量简化一些参数配置。
cat ~/.bash_profile
※ 数据库部署完毕,它会有一个postgres的数据库,还有两个模板数据库template0(最精简)和template1(默认模板)。用户在创建数据库时,默认是从模板数据库template1克隆出来的。如果向template1中添加一些表或函数,那么新创建的数据库就会继承template1的内容。
3.数据库退出
postgres=# \q
4.PSQL执行SQL命令
psql -c "select * from test limit 10" zhong zuser01
5.PSQL执行SQL文件
vi /tmp/test.sql
truncate table test;
DROP TABLE test;
CREATE TABLE test(id int4, name text, create_time timestamp without time zone default clock_timestamp());
ALTER TABLE test ADD PRIMARY KEY (id);
INSERT INTO test(id,name) SELECT n,n || '_francs' from generate_series(1,500) n;
/opt/pgsql/bin/psql zhong zuser01 -f /tmp/test.sql
6.PSQL常用元命令
参数 | 用途 |
\h | 查看帮助文档 |
\c 数据库名 | 切换数据库 |
\du | 查询所有用户与权限 |
\db | 查询表空间信息 |
\dp | 查询表权限分配 |
\dt | 查询用户所有表 |
\d [表或索引] | 查询表与索引定义 |
\di [索引名] | 查询用户所有索引 |
\db+ | 查询数据库容量 |
\d+ | 查询所有表容量 |
\di+ | 查询所有索引容量 |
\sf <函数名称> | 查看函数代码 |
\x | 设置查询结果输出模式 |
\pset border <0|1|2> | 设置输出格式边框宽 |
\timing <on|off> | 显示SQL已执行时间 |
※ 通过tab键实现补全元命令或表名称
[PSQL常见问题]
1.PSQL自动提交如何取消?
方法一:通过begin命令与commit/rollback命令结合实现;
方法二:直接关闭psql自动提交功能;
\set autocommit off
2.PSQL显示乱码?
客户端与服务器端字符不一致时,PSQL会出现部分显示乱码。
\encoding gbk
\encoding utf8
3.如何将常用的SQL命令制作为元命令方式?
通过编辑.psqlrc文件就可以实现
vi ~/.psqlrc
\set active_session 'select pid, usename, datname, query, client_addr from pg_stat_activity where pid<> pg_backend_pid() and state=\'active\' order by query;'
如下是我常用的定制:
-- 登录提示符
\set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
-- 查询活动会话
\set active_session 'select pid, usename, datname, state, query, client_addr from pg_stat_activity where pid<> pg_backend_pid() order by query;'
-- 查询等待事件
\set wait_event 'select pid,usename,datname,query,client_addr,wait_event_type,wait_event from pg_stat_activity where pid <> pg_backend_pid() and wait_event is not null order by wait_event_type;'
-- 查询数据库连接数
\set connections 'select datname, usename, client_addr, count(*) from pg_stat_activity where pid<> pg_backend_pid() group by 1,2,3 order by 1,2,4 desc;'
- pgpass密码文件
%APPDATA%\postgresql\pgpass.conf
hostname:port:database:username:password
[更新履历]
2019-12-05 新增用户切换命令信息
2019-12-28 新增pgpass免密文件