2. 命令行选项应用示例:
#-d: 指定连接的数据库。
#-U: 指定连接的用户。
#-c: 后面的SQL语句是本次操作需要执行的命令。
/> psql -d posgres -U postgres -c "select * from testtable"
i
---
1
2
3
5
(4 rows)
#-t: 没有输出上面输出结果中的字段标题信息和行数统计信息。
#-q:该选项和-t选项联合使用,非常有利于自动化脚本。如:
# select 'copy ' || tablename || ' to ' || tablename || '.sql' from pg_tables
#由以上sql语句生成的结果集,在重定向到输出文件后,可以作为下一次psql的输入执行。
/> psql -t -q -c "select * from testtable"
1
2
3
5
#-l: 列出当前系统中可用的数据库。
/> psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
------------+----------+----------+-------------+-------------+-----------------------
mydatabase | myuser | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
... ...
命令
a |
如果目前的表输出格式是不对齐的,切换成对齐的。如果是对齐的,则切换成不对齐。 |
cd [directory] |
把当前工作目录切换到directory。没有参数则切换到当前用户的主目录。 |
C [title] |
为查询结果添加表头(title),如果没有参数则取消当前的表头。 |
c[dbname[username] ] |
连接新的数据库,同时断开当前连接。如果dbname参数为-,表示仍然连接当前数据库。如果忽略username,则表示继续使用当前的用户名。 |
copy |
其参数类似于SQL copy,功能则几乎等同于SQL copy,一个重要的差别是该内置命令可以将表的内容导出到本地,或者是从本地导入到数据库指定的表,而SQL copy则是将表中的数据导出到服务器的某个文件,或者是从服务器的文件导入到数据表。由此可见,SQL copy的效率要优于该内置命令。 |
d [pattern] |
显示和pattern匹配的数据库对象,如表、视图、索引或者序列。显示所有列,它们的类型,表空间(如果不是缺省的)和任何特殊属性。 |
db [pattern] |
列出所有可用的表空间。如果声明了pattern, 那么只显示那些匹配模式的表空间。 |
db+ [pattern] |
和上一个命令相比,还会新增显示每个表空间的权限信息。 |
df [pattern] |
列出所有可用函数,以及它们的参数和返回的数据类型。如果声明了pattern,那么只显示匹配(正则表达式)的函数。 |
df+ [pattern] |
和上一个命令相比,还会新增显示每个函数的附加信息,包括语言和描述。 |
distvS [pattern] |
这不是一个单独命令名称:字母i、s、t、v、S分别代表索引(index)、序列(sequence)、表(table)、视图(view)和系统表(system table)。你可以以任意顺序声明部分或者所有这些字母获得这些对象的一个列表。 |
dn [pattern] |
列出所有可用模式。如果声明了pattern,那么只列出匹配模式的模式名。 |
dn+ [pattern] |
和上一个命令相比,还会新增显示每个对象的权限和注释。 |
dp [pattern] |
生成一列可用的表和它们相关的权限。如果声明了pattern, 那么只列出名字可以匹配模式的表。 |
dT [pattern] |
列出所有数据类型或只显示那些匹配pattern的。 |
du [pattern] |
列出所有已配置用户或者只列出那些匹配pattern的用户。 |
echotext[ ... ] |
向标准输出打印参数,用一个空格分隔并且最后跟着一个新行。如:echo `date` |
g[{filename||command}] |
把当前的查询结果缓冲区的内容发送给服务器并且把查询的输出存储到可选的filename或者把输出定向到一个独立的在执行command的Unix shell。 |
ifilename |
从文件filename中读取并把其内容当作从键盘输入的那样执行查询。 |
l |
列出服务器上所有数据库的名字和它们的所有者以及字符集编码。 |
o[{filename||command}] |
把后面的查询结果保存到文件filename里或者把后面的查询结果定向到一个独立的shellcommand。 |
p |
打印当前查询缓冲区到标准输出。 |
q |
退出psql程序。 |
r |
重置(清空)查询缓冲区。 |
s [filename] |
将命令行历史打印出或是存放到filename。如果省略filename,历史将输出到标准输出。 |
t |
切换是否输出列/字段名的信息头和行记数脚注。 |
w{filename||command} |
将当前查询缓冲区输出到文件filename或者定向到Unix命令command。 |
z [pattern] |
生成一个带有访问权限列表的数据库中所有表,视图和序列的列表。如果给出任何pattern,则被当成一个规则表达式,只显示匹配的表,视图和序列。 |
!! [command] |
返回到一个独立的Unix shell或者执行Unix命令command。参数不会被进一步解释,shell将看到全部参数。 |
4. 内置命令应用示例:
在psql中,大部分的内置命令都比较易于理解,因此这里只是给出几个我个人认为相对容易混淆的命令。
# c: 其中横线(-)表示仍然连接当前数据库,myuser是新的用户名。
postgres=# c - myuser
Password for user myuser:
postgres=> SELECT user;
current_user
--------------
myuser
(1 row)
# 执行任意SQL语句。
postgres=# SELECT * FROM testtable WHERE i = 2;
i
---
2
(1 row)
# g 命令会将上一个SQL命令的结果输出到指定文件。
postgres=# g my_file_for_command_g
postgres=# !! cat my_file_for_command_g
i
---
2
(1 row)
# g 命令会将上一个SQL命令的结果从管道输出到指定的Shell命令,如cat。
postgres=# g | cat
i
---
2
(1 row)
# p 打印上一个SQL命令。
postgres=# p
SELECT * FROM testtable WHERE i = 2;
# w 将上一个SQL命令输出到指定的文件。
postgres=# w my_file_for_option_w
postgres=# !! cat my_file_for_option_w
SELECT * FROM testtable WHERE i = 2;
# o 和g相反,该命令会将后面psql命令的输出结果输出到指定的文件,直到遇到下一个独立的o,
# 此后的命令结果将不再输出到该文件。
postgres=# o my_file_for_option_o
postgres=# SELECT * FROM testtable WHERE i = 1;
# 终止后面的命令结果也输出到my_file_for_option_o文件中。
postgres=# o
postgres=# !! cat my_file_for_option_o
i
---
1