一、psql简介
psql是PostgreSQL中的一个命令行交互式客户端工具,类似Oracle中的命令行工具sqlplus,它允许用户交互地键入SQL语句或命令,然后将其发送给PostgreSQL服务器,再显示SQL语句或命令的结果。另外,所输入内容还可以来自一个文件。此外,它还提供了一些快捷命令和多种类似Shell的特性来实现书写脚本,以及对大量任务的自动化操作。虽然psql的功能与sqlplus差不多,但使用起来远比sqlplus简便,如psq|工具可以用上下方向键把上一条和下一条SQL命令翻出来,还有单击Tab键自动补全的强大功能
当然,对于初学者来说,也可以使用PostgreSQL中图形化客户端工具(如 pgAdmin)来操作PostgreSQL数据库。但掌握了psql的使用方法,你就会体会到它的便捷。有些公司不允许直接连接生产环境中的数据库主机,需要通过跳板机(或堡垒机) 登录到一台无图形界面的Linux服务器上后才能连接到数据库服务器,此时无法使用图形界面工具,只能使用psql命令。psql与pgAdmin之间的关系类似于Vi与一些图形化工具的关系,这个小工具应用起来更快捷。
本章只介绍psql中常用的一些命令和小技巧,如果读者想了解psql命令的更多用法请阅读官方手册“Reference”—“PostgreSQL Client Applications”—“psq|”中的详细内容。
二、psql的简单使用
如果已建好数据库,可以在postgres用户下直接输入“psql进入命令交互输入模式:
[postgres@master ~]$ psql psql (16.1) Type "help" for help. postgres=#
进入命令交互输入模式后会显示psql版本,然后出现提示符,可以在此提示符下输入标准的SQL命令,也可以输入psql工具特有的快捷命令,这些快捷命令都是以斜杠“\” 开头的。
为什么不需要输入用户名和密码?安装PostgreSQL数据库时,会创建一个与初始化数据库时的操作系统用户同名的数据库用户,这个用户是数据库的超级用户,在此OS用户下登录数据库时,因为执行的是操作系统认证,所以是不需要用户名和密码的用户也可以通过修改pg_hba.conf文件来要求用户输入密码。
当然,psql也支持直接使用命令行参数查询信息和执行SQL,这种非交互模式与使用一般的Linux命令没有区别,如使用“psql -I”命令可以查看数据库:
[postgres@master ~]$ psql -l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges -----------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------- postgres | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | template0 | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres (3 rows)
也可以进入psql的命令交互输入模式使用“\”命令查看有哪些数据库,与使用上面的“psql -”命令得到的结果是相同的,示例如下:
[postgres@master ~]$ psql psql (16.1) Type "help" for help. postgres=# \l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges -----------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------- postgres | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | template0 | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | en_US.UTF8 | en_US.UTF8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres (3 rows) postgres=#
上面的查询结果中有一个叫“postgres”的数据库,这是默认postgreSQL安装完成后就有的一个数据库,还有两个模板数据库:template0和template1。当用户创建数据库时,默认是从模板数据库“template1”克隆来的,所以通常我们可以定制template1数据库中的内容,如向template1中添加一些表后函数,这样后续创建的数据库就会继承 template1中的内容&#x