未命名文件
更新时间:2026-06-24
PalopgMPP数据库的交互式命令行接口
语法
Bash
1 ssql [option ...] [dbname [username]]
2 ```
3
4
5## 描述
6
7`ssql`是PalopgMPP数据库的基于终端的前端。 它能够以交互方式键入查询,将其发布到PalopgMPP数据库,并查看查询结果。或者,输入可以来自文件。 此外,它提供了许多元命令和各种类似于shell的功能,以帮助编写脚本和自动化各种任务。
8
9
10选项
11: 该命令选项说明见下
12
13 -a \| --echo-all
14 : 读取时将所有非空输入行打印到标准输出。 (这不适用于以交互方式读取的行。) 这等效于将变量`ECHO`设置为`all`。
15
16 -A \| --no-align
17 : 切换到不对齐输出模式。 (默认输出模式已对齐。)
18
19 -b \| --echo-errors
20 : 打印失败命令
21
22 -c '`command`' \| --command='`command'`
23 : 指定`ssql`将执行指定的命令字符串,然后退出。 这在shell脚本中很有用。
24
25 `command`必须是服务器可以完全解析的命令字符串,也可以是单个反斜杠命令。
26
27 因此,不能将SQL和`ssql`元命令与此选项混合使用。 为此,可以将字符串通过管道传递到`ssql`中,如下所示:
28
29 ``` bash
30 echo '\x \\ SELECT * FROM foo;' | ssql
31 ```
32
33 (`\\`是分隔符元命令。)
34
35 如果命令字符串包含多个SQL命令,则它们将在单个事务中进行处理,除非字符串中包含明确的`BEGIN/COMMIT`命令以将其分为多个事务。这与将相同的字符串提供给`ssql`的标准输入时的行为不同。 此外,仅返回最后一个SQL命令的结果。
36
37 -d `dbname` \| --dbname=`dbname`
38 : 指定要连接的数据库的名称。这等效于在命令行上将dbname指定为第一个非选项参数。
39
40 如果此参数包含`=`符号或以有效的URI前缀(`palopgsql://`)开头,则将其视为`conninfo`字符串。
41
42 -e \| --echo-queries
43 : 将所有发送到服务器的SQL命令复制到标准输出。
44
45 -E \| --echo-hidden
46 : 回显由`\d`和其他反斜杠命令生成的实际查询。 可以使用它来研究`ssql`的内部操作。这等效于将变量`ECHO_HIDDEN`设置为`on`。
47
48 -f `filename` \| --file=`filename`
49 : 使用`filename`作为命令源,而不是交互读取命令。 处理完文件后,`ssql`终止。 在许多方面,这等效于元命令`\i`。
50
51 如果文件名是`-`(连字符),则将读取标准输入,直到EOF指示或`\q`元命令为止。但是请注意,在这种情况下不使用Readline(就像已指定`-n`一样)。
52
53 使用此选项与编写`ssql < filename`稍有不同。
54 通常,两者都可以达到您的期望,但是使用`-f`可以启用一些不错的功能,例如带有行号的错误消息。使用此选项还可能会减少启动开销。 另一方面,使用shell的输入重定向的变体在理论上可以保证产生与您手工输入的所有内容完全相同的输出。
55
56 -F `separator` \| --field-separator=`separator`
57 : 使用指定的分隔符作为未对齐输出的字段分隔符。
58
59 -H \| --html
60 : 打开HTML表格输出。
61
62 -l \| --list
63 : 列出所有可用的数据库,然后退出。其他非连接选项将被忽略。
64
65 -L `filename` \| --log-file=`filename`
66 : 除正常输出目标外,还将所有查询输出写入指定的日志文件。
67
68 -n \| --no-readline
69 : 不要将Readline用于行编辑,也不要使用命令历史记录。 剪切和粘贴时,这对于关闭选项卡扩展很有用。
70
71 -o `filename` \| --output=`filename`
72 : 将所有查询输出放入指定的文件。
73
74 -P `assignment` \| --pset=`assignment`
75 : 允许您在命令行上以`\pset`样式指定打印选项。 请注意,这里必须用等号(而不是空格)分隔名称和值。因此,要将输出格式设置为`LaTeX`,可以编写`-P format=latex`。
76
77 -q \| --quiet
78 : 指定`ssql`应该安静地工作。 默认情况下,它打印欢迎消息和各种信息输出。 如果使用此选项,则不会发生任何情况。这对于`-c`选项很有用。 这等效于将变量`QUIET`设置为`on`。
79
80 -R `separator` \| --record-separator=`separator`
81 : 使用`separator`作为未对齐输出的记录分隔符。
82
83 -s \| --single-step
84 : 以单步模式运行。 这意味着在将每个命令发送到服务器之前都会提示用户,并且还可以选择取消执行。 使用它来调试脚本。
85
86 -S \| --single-line
87 : 在单行模式下运行,其中新行像分号一样终止SQL命令。
88
89 -t \| --tuples-only
90 : 关闭列名和结果行计数页脚等的打印。 此命令等效于`\pset tuples_only`,并且为方便起见而提供。
91
92 -T `table_options` \| --table-attr=`table_options`
93 : 允许您指定要放置在HTML表格标记内的选项。 有关详细信息,请参见`\pset`。
94
95 -v `assignment` \| --set=`assignment` \| --variable=`assignment`
96 : 执行变量分配,例如`\set` meta命令。 请注意,必须在命令行上用等号分隔名称和值(如果有)。 要取消设置变量,请取消等号。要将变量设置为空值,请使用等号,但不要使用该值。这些分配是在启动的非常早期阶段完成的,因此保留给内部使用的变量可能会在以后被覆盖。
97
98 -V \| --version
99 : 打印`ssql`版本并退出。
100
101 -x \| --expanded
102 : 打开扩展表格式模式。
103
104 -X \| --no-ssqlrc
105 : 不要读取启动文件(系统范围内的`ssqlrc`文件或用户的`~/.ssqlrc`文件都不能读取)。
106
107 -z \| --field-separator-zero
108 : 将未对齐输出的字段分隔符设置为零字节。
109
110 -0 \| --record-separator-zero
111 : 将未对齐输出的记录分隔符设置为零字节。 这对于例如与`xargs -0`配合非常有用。
112
113 -1 \| --single-transaction
114 : 当`ssql`执行脚本时, 添加此选项会将`BEGIN`/`COMMIT`包装在脚本周围,以将其作为单个事务执行。
115 这样可以确保所有命令都成功完成,或者不应用任何更改。
116
117 如果脚本本身使用`BEGIN`,`COMMIT`或`ROLLBACK`,则此选项将不会达到预期的效果。
118 另外,如果脚本包含无法在事务块内执行的任何命令,则指定此选项将导致该命令(并因此导致整个事务)失败。
119
120 -? \| --help
121 : 显示有关`ssql`命令行参数的帮助,然后退出。
122
123
124
125 以下选项均为连接选项,即连接PalopgMPP数据库的相关信息:
126
127 \-h `host` \| \--host=`host`
128 : 运行PalopgMPP coordinator数据库服务器的计算机的主机名。如果未指定,则从环境变量`SDHOST`读取或默认为localhost。
129
130 \-p `port` \| \--port=`port`
131 : PalopgMPP coordinator数据库服务器正在侦听连接的TCP端口。 如果未指定,则从环境变量`SDPORT`读取或默认为3000。
132
133 \-U `username` \| --username=`username`
134 : 要用作连接的数据库角色名称。 如果未指定,则从环境变量`SDUSER`读取或默认为当前系统角色名称。
135
136 \-w \| \--no-password
137 : 不发出密码提示。 如果服务器要求密码验证,而其他方式(例如`.sdpass`文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。
138
139 * **注意:**此选项在整个会话中保持设置状态,因此会影响元命令`\connect`的使用以及初始连接尝试。
140
141 \-W | \--password
142 : 强制输入密码提示。
143
144
145退出状态
146: 如果`ssql`正常完成,它将返回0到shell程序; 如果发生自身的致命错误(内存不足,找不到文件),则返回1;如果与服务器的连接断开并且会话不是交互式的,则返回2;如果脚本中发生错误,并设置了变量`ON_ERROR_STOP`,则返回3。
147
148
149用法
150: ssql客户端程序用法如下
151
152 * **连接到数据库**
153
154 `ssql`是PalopgMPP数据库的客户端应用程序。为了连接到数据库,需要知道目标数据库的名称,PalopgMPP主服务器的主机名和端口号以及要用作连接的数据库用户名。可以通过命令行选项(分别为`-d`,`-h`,`-p`和`-U`)告知`ssql`这些参数。
155
156 如果找到的参数不属于任何选项,它将被解释为数据库名称(或用户名,如果已经给出数据库名称)。并非所有这些选项都是必需的;有一些可用的默认值。
157
158 如果省略主机名,则`ssql`将通过UNIX域套接字连接到本地主机上的coordinator实例,或者通过TCP/IP连接到没有UNIX域套接字的计算机上的`localhost`。coordinator默认的端口号是3000。 如果使用其他端口,则必须指定端口。
159
160 默认数据库用户名是操作系统用户名,默认数据库名也是如此。请注意,不能仅以任何用户名连接到任何数据库。当默认值不合适时,可以通过将任何或所有环境变量`SDAPPNAME`,`SDDATABASE`,`SDHOST`,`SDPORT`和`SDUSER`设置为适当的值来节省键入时间。
161
162 拥有`~/.sdpass`文件也很方便,可以避免定期输入密码。 该文件应位于的home目录中,并包含以下格式的行:
163
164 ``` bash
165 hostname:port:database:username:password
166 ```
167
168 `.sdpass`的权限必须禁止任何其他用户或组的访问(例如:`chmod 0600 ~/.sdpass`)。如果权限不严格于此权限,则文件将被忽略。
169
170 指定连接参数的另一种方法是在`conninfo`字符串或URI中,而不是使用数据库名称。 这种机制使您可以非常广泛地控制连接。 例如:
171
172 ``` bash
173 $ ssql "service=myservice sslmode=require"
174 $ ssql palopgsql://coorhost1:3000/mydb?sslmode=require
175 ```
176
177 如果由于某种原因(权限不足,服务器未运行等)而无法建立连接,则`ssql`将返回错误并终止。
178
179 如果标准输入或标准输出中至少有一个是终端,则`ssql`会将客户端编码设置为`auto`,它将从语言环境设置(Unix系统上的`LC_CTYPE`环境变量)中检测适当的客户端编码。如果无法按预期进行,则可以使用环境变量`SDCLIENTENCODING`覆盖客户端编码。
180
181
182 * **输入SQL命令**
183
184 在正常操作中,`ssql`会提示您输入当前已连接`ssql`的数据库的名称,后跟字符串**=\>**(对于常规用户)或**=\#**(对于数据库管理员)。
185
186 例如:
187
188 ``` sql
189 testdb=>
190 testdb=#
191 ```
192
193 在提示符下,用户可以键入SQL命令。 通常,当到达命令终止分号时,会将输入行发送到服务器。 行尾不会终止命令。因此,为了清楚起见,命令可以分布在几行上。如果命令已正确发送和执行,则命令的结果将显示在屏幕上。
194
195 如果不受信任的用户可以访问未采用"安全模式使用模式"的数据库,请通过从`search_path`中删除可公开写入的模式来开始会话。
196
197 可以在连接字符串中添加`options=-csearch_path=`或在其他SQL命令之前发出`SELECT pg_catalog.set_config('search_path', '', false)`。此注意事项并非特定于`ssql`;它适用于执行任意SQL命令的每个接口。
198
199
200元命令
201: 在`ssql`中输入的任何以不带引号反斜杠开头的内容都是`ssql`元命令,该命令由`ssql`本身处理。这些命令有助于使`ssql`对管理或脚本化更加有用。 元命令通常被称为斜杠或反斜杠命令。
202
203 `ssql`命令的格式为反斜杠,后跟命令动词,然后是参数。 参数与命令动词之间用任意数量的空格字符分隔。
204
205 要将空格包含在参数中,可以用单引号将其引起来。 要将单引号包含在这样的参数中,请在单引号文本中写两个单引号。此外,单引号中包含的所有内容都会用类似C的方式替换`\n`(换行),`\t`(制表符),`\b`(退格键),`\r`(回车),`\f`(换页),`\digits`( 八进制)和`\xdigits`(十六进制)。在单引号包围的文本中,反斜杠前导任何其他字符,都表示是该单个字符,不管它是什么。
206
207 在一个参数中,加上反勾号(`` ` ``)的文本被看做是一个命令行,传递给shell。 该命令的输出(删除结尾的新行)替换了加上反勾号的文本。
208
209 如果一个未加引号的冒号(`:`)后面跟着一个`ssql`变量名,出现在一个参数中,那么它会被变量的值取代,就像"SQL代换"中描述的那样。
210
211 有些命令以一个SQL标识的名称(比如一个表名)为参数。这些参数遵循SQL语法关于双引号的规则:不带双引号的标识强制成小写,而双引号(`"`)保护字母不进行大小写转换,并且允许在标识符中使用空白。在双引号中,成对的双引号在结果名字中分析成一个双引号。 比如,`FOO"BAR"BAZ`解析成`fooBARbaz`;而`"A weird"" name"`解析成`A weird" name`。
212
213 对参数的分析在行的末尾停止,或者在找到另一个不带引号的反斜杠时停止。 一个不带引号的反斜杠会认为是一个新的元命令的开始。特殊的双反斜杠序列`\\`标识参数的结尾并将继续分析后面的SQL命令(如果存在的话)。这样SQL和`ssql`命令可以自由的在一行里面混合。 但是在任何情况下,一条元命令的参数不能延续超过行尾。
214
215 下面是已定义的元命令:
216
217 ` \\a `
218 : 如果目前的表输出格式是不对齐的,则切换成对齐的。 如果是对齐的,则切换成不对齐。 这条命令是为了向后兼容。
219
220 可参阅`\pset`获取更通用的解决方法。
221
222 `\\c ` \| `\\connect` \[`dbname` \[`username`\] \[`host`] \[`port`\\]\] `conninfo`
223 : 与一个PalopgSQL服务器建立一个新的连接。要使用的连接参数通过位置语法或者使用`conninfo`连接字符串指定。
224
225 如果该命令省略了数据库名称,用户,主机或端口,则新连接可以重用先前连接中的值。 默认情况下,除了处理`conninfo`字符串时,都将重用先前连接的值。传递`-reuse-previous=on`或`-reuse-previous=off`的第一个参数将覆盖该默认值。当命令既未指定也不重用特定参数时,将使用`libpq`缺省值。将`dbname`,`username`,`host`或`port`中的任何一个指定为`-`等同于省略该参数。
226
227 如果成功制作了新连接,那么关闭以前的连接。 如果连接失败,那么仅当`ssql`处于交互模式时将保留前面的连接。如果运行的是非交互的脚本,处理会马上停止并返回一个错误。设置这样的区别一方面是为用户使用方便考虑,另一方面也为了保证脚本不会碰巧操作了错误的数据库的安全机制考虑。
228
229 示例:
230
231 ``` sql
232 => \c mydb myuser host.dom 4000
233 => \c service=foo
234 => \c "host=localhost port=3000 dbname=mydb connect_timeout=10 sslmode=disable"
235 => \c palopgsql://tom@localhost/mydb?application_name=myapp
236 ```
237
238 `\\C` [`title`]
239 : 把正在打印的表的标题设置为一个查询的结果或者取消这样的设置。 这条命令等效于`\pset title`。
240
241 `\\cd `[`directory`]
242 : 把当前工作目录改变到directory。 没有参数则是改变到当前用户的家目录。 使用`\!pwd`打印出当前工作目录。
243
244 `\\conninfo`
245 : 显示有关当前连接的信息,包括数据库名称,用户名,连接类型(UNIX域套接字,`TCP/IP`等),主机和端口。
246
247 `\\copy` \{`table` \[(`column_list`)\] \| (`query`)\} \{from \| to\} \{'`filename`' \| program '`command`' \| stdin \| stdout \| pstdin \| pstdout\} \[with\] (`option` \[, ...\]) \]
248 : 执行前端(客户端)拷贝。 这是一个运行SQL `COPY`命令的操作,不同的是服务器在读写指明的文件,而`ssql`读写文件并作为本地的文件系统和服务器之间的跳板取出或写入数据。这意味着文件访问性和权限都是本地用户的,而不是服务器的,因此不需要SQL数据库管理员权限。
249
250 当指定了`program`时,`command`是通过`ssql`执行的,并且来自或到达`command`的数据在服务器和客户端之间传送。再次,文件访问性和权限都是本地用户的,而不是服务器的,因此不需要SQL数据库管理员权限。
251
252 `\copy ... from stdin | to stdout`分别基于命令输入和输出进行读/写。从发出命令的同一源读取所有行,直到`\.`为止或流到达`EOF`。输出被发送到与命令输出相同的位置。 要从`ssql`的标准输入或输出读取/写入,请使用`pstdin`或`pstdout`。此选项对于在SQL脚本文件中内联填充表很有用。
253
254 该命令的语法与SQL `COPY`命令的语法相似,并且`option`必须指示SQL `COPY`命令的选项之一。请注意,因此,特殊的解析规则适用于`\copy`命令。特别是,变量替换规则和反斜杠转义不适用。
255
256 此操作不如SQL `COPY`命令有效,因为所有数据都必须通过客户端/服务器连接传递。
257
258 \\copyright
259 : 显示PalopgMPP数据库所基于的PostgreSQL的版权和发行条款。
260
261 \\d \[`relation_pattern`\] \| \\d+ \[`relation_pattern`\] \| \\dS \[`relation_pattern`\]
262 : 对于每个匹配pattern的关系 (表、视图、索引、序列或外部表)或复合类型,显示所有列、它们的类型、表空间(如果不是缺省的)和任何特殊属性(诸如`NOT NULL`或缺省等)。 相关的索引、约束、规则、触发器也同样显示出来。 对于外部表,也显示相关的外部服务器。
263
264 - 对于一些关系类型,`\d`为每个字段显示了额外的信息: 序列的字段值,索引的索引表达式和外部表的外部数据封装器选项。
265
266 - 命令形式`\d+`相同,除了显示更多信息:显示与表的列关联的所有注释,以及表中是否存在OID,如果关系是视图,则为视图定义。
267
268 对于分区表,用根分区表或子分区表指定的命令`\d`或`\d+`显示有关该表的信息,包括分区表当前级别上的分区键。命令`\d+`还显示表的直接子分区以及该子分区是外部表还是常规表。
269
270 对于列存表,`\d+`显示表的存储选项。
271
272 - 缺省的,只显示用户创建的对象;应用一个模式或`S`修饰符包含系统对象。
273
274 * **注意:** 如果不带任何pattern参数调用`\d`,那么等效于`\dtvsE`,将显示一个所有可见表,视图,序列和外部表的列表。
275
276
277 \\da\[S\] \[`aggregate_pattern`\]
278 : 列出聚合函数,以及它们的返回类型和操作的数据类型。 如果声明了pattern,那么只显示匹配模式的聚合函数。
279
280 缺省的,只显示用户创建的对象;应用一个模式或`S`修饰符包含系统对象。
281
282 \\db\[+\] \[`tablespace_pattern`\]
283 : 列出所有可用的表空间及其对应的路径。 如果指定了模式,则仅显示名称与模式匹配的表空间。
284
285 如果在命令名称后附加+,则会列出每个对象及其关联的权限。
286
287 \\dc\[S+\] \[`conversion_pattern`\]
288 : 列出字符集编码之间的转换。 如果指定了模式,则仅列出名称与该模式匹配的转换。 默认情况下,仅显示用户创建的对象。提供一个模式或`S`修饰符以包含系统对象。如果在命令名称后附加`+`,则会列出每个对象及其相关描述。
289
290 \\dC\[+\] \[`pattern`\]
291 : 列出类型转换。 如果指定了模式,则仅列出其源或目标类型与该模式匹配的转换。 如果在命令名称后附加`+`,则会列出每个对象及其相关描述。
292
293 \\dd\[S\] \[`pattern`\]
294 : 显示类型`constraint`,`operator class`,`operator family`,`rule`和`trigger`的对象的描述。 所有其他注释都可以通过相应的反斜杠命令查看那些对象类型。
295
296 `\dd`显示与模式匹配的对象的描述,或者如果没有给出参数,则显示适当类型的可见对象的描述。 但无论哪种情况,仅列出具有描述的对象。
297
298 默认情况下,仅显示用户创建的对象。 提供一个模式或`S`修饰符以包含系统对象。
299
300 可以使用`COMMENT` SQL命令创建对象的描述。
301
302 \\ddp \[`pattern`\]
303 : 列出默认的访问权限设置。 将为每个角色(和模式,如果适用)显示一个条目,其默认权限设置已从内置默认值更改。如果指定了`pattern`,则仅列出角色名称或模式名称与模式匹配的条目。
304
305 `ALTER DEFAULT PRIVILEGES`命令用于设置默认访问权限。
306
307 \\dD\[S+\] \[`domain_pattern`\]
308 : 列出域。如果指定了模式,则仅显示名称与该模式匹配的域。 默认情况下,仅显示用户创建的对象。 提供一个模式或`S`修饰符以包含系统对象。如果在命令名称后附加`+`,则会列出每个对象及其关联的权限和描述。
309
310 \\dEistPv\[S+\] \[`external_table | index | sequence | table | parent table | view`\]
311 : 这不是实际的命令名称:字母`E`,`i`,`s`,`t`,`P`和`v`分别代表外部表, 索引,序列,表,父表和视图。
312
313 可以按任何顺序指定任何或所有这些字母,以获得这些类型的对象的列表。
314
315 例如,`\dit`列出索引和表。
316
317 如果在命令名称后附加`+`,则会列出每个对象及其在磁盘上的物理大小及其相关的描述(如果有)。如果指定了模式,则仅列出名称与该模式匹配的对象。 默认情况下,仅显示用户创建的对象。 提供一个模式或`S`修饰符以包含系统对象。
318
319 \\des\[+\] \[`foreign_server_pattern`\]
320 : 列出外部服务器。 如果指定了模式,则仅列出名称与该模式匹配的服务器。如果使用`\des+`形式,则会显示每个服务器的完整描述,包括服务器的ACL,类型,版本,选项和描述。
321
322 \\det\[+\] \[`foreign_table_pattern`\]
323 : 列出所有外部表。 如果指定了模式,则仅列出其表名或模式名称与该模式匹配的条目。如果使用`\det+`形式,则还将显示通用选项和外部表描述。
324
325 \\deu\[+\] \[`user_mapping_pattern`\]
326 : 列出用户映射。 如果指定了模式,则仅列出其用户名与模式匹配的那些映射。 如果使用`\deu+`形式,则会显示有关每个映射的其他信息。
327
328
329 * **警告**: `\deu+`可能也显示远程用户的用户名和密码,所以要小心不要透漏它们。
330
331 \\dew\[+\] \[`foreign_data_wrapper_pattern`\]
332 : 列出外部数据包装器。 如果指定了模式,则仅列出名称与该模式匹配的数据包装器。如果使用`\dew+`形式,则还将显示ACL,选项和外部数据包装程序的描述。
333
334 \\df\[antwS+\] \[`function_pattern`\]
335 : 列出函数以及它们的参数,返回类型和函数类型,这些函数分为“agg”(聚合),“normal”,“trigger”或“window”。要仅显示特定类型的函数,请在命令中添加相应的字母`a`,`n`,`t`或`w`。
336
337 如果指定了模式,则仅显示名称与该模式匹配的函数。
338
339 如果使用`\df+`形式,则会显示有关每个函数的其他信息,包括安全性,易变性,语言,源代码和描述。 默认情况下,仅显示用户创建的对象。
340
341 提供一个模式或`S`修饰符以包含系统对象。
342
343 \\dF\[+\] \[`pattern`\]
344 : 列出文本搜索配置。 如果指定了模式,则仅显示名称与该模式匹配的配置。
345
346 如果使用`\dF+`形式,则会显示每个配置的完整描述,包括基础文本搜索解析器和每种解析器令牌类型的字典列表。
347
348 \\dFd\[+\] \[`pattern`\]
349 : 列出文本搜索词典。 如果指定了模式,则仅显示名称与该模式匹配的词典。
350
351 如果使用`\dFd+`形式,则会显示有关每个所选词典的其他信息,包括基础的文本搜索模板和选项值。
352
353 \\dFp\[+\] \[`pattern`\]
354 : 列出文本搜索解析器。 如果指定了模式,则仅显示名称与模式匹配的解析器。
355
356 如果使用`\dFp+`形式,则会显示每个解析器的完整说明,包括基础函数和已识别令牌类型的列表。
357
358 \\dFt\[+\] \[`pattern`\]
359 : 列出文本搜索模板。 如果指定了模式,则仅显示名称与该模式匹配的模板。
360
361 如果使用`\dFt+`形式,则会显示有关每个模板的其他信息,包括基础函数名称。
362
363 \\dg\[+\] \[`role_pattern`\]
364 : 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此该命令现在等效于`\du`。)
365
366 如果指定了模式,则仅列出名称与模式匹配的角色。
367
368 如果使用`\dg+`形式,则将显示有关每个角色的其他信息;否则,将显示其他信息。 目前,这会为每个角色添加注释。
369
370 \\dl
371 : 这是`\lo_list`的别名,其中显示了大对象列表。
372
373 \\dL\[S+\] \[`pattern`\]
374 : 列出过程语言。 如果指定了模式,则仅列出名称与该模式匹配的语言。 默认情况下,仅显示用户创建的语言。 提供`S`修饰符以包括系统对象。
375
376 如果在命令名称后附加`+`,则将列出每种语言及其调用处理程序,验证程序,访问特权以及是否为系统对象。
377
378 \\dn\[S+\] \[`schema_pattern`\]
379 : 列出所有可用的模式(名称空间)。 如果指定了模式,则仅列出名称与模式匹配的模式。 默认情况下,仅显示用户创建的对象。提供一个模式或`S`修饰符以包含系统对象。
380
381 如果在命令名后附加`+`,则列出每个对象及其相关的权限和描述(如果有)。
382
383 \\do\[S\] \[`operator_pattern`\]
384 : 列出可用的运算符及其操作数和返回类型。 如果指定了模式,则仅列出名称与模式匹配的运算符。 默认情况下,仅显示用户创建的对象。提供一个模式或`S`修饰符以包含系统对象。
385
386 \\dO\[S+\] \[`pattern`\]
387 : 列出排序规则。 如果指定了模式,则仅列出名称与模式匹配的排序规则。 默认情况下,仅显示用户创建的对象。提供一个模式或`S`修饰符以包含系统对象。
388
389 如果在命令名称后附加`+`,则将列出每个排序规则及其关联的描述(如果有)。
390
391 请注意,仅显示可与当前数据库的编码一起使用的排序规则,因此在同一安装的不同数据库中,结果可能会有所不同。
392
393 \\dp \[`relation_pattern_to_show_privileges`\]
394 : 列出具有相关访问权限的表,视图和序列。 如果指定了模式,则仅列出名称与该模式匹配的表,视图和序列。`GRANT`和`REVOKE`命令用于设置访问权限。 特权显示的含义在`GRANT`下进行了说明。
395
396 \\drds \[`role-pattern` \[database-pattern\]\]
397 : 列出定义的配置设置。 这些设置可以是角色特定的,数据库特定的或两者。`role-pattern`和`database-pattern`分别用于选择特定角色和要列出的数据库。如果省略,或者指定`*`,则列出所有设置,包括分别不是角色特定的或数据库特定的设置。
398
399 \\dT\[S+\] \[`datatype_pattern`\]
400 : 列出数据类型。 如果指定了模式,则仅列出名称与模式匹配的类型。
401
402 如果在命令名称后附加`+`,则将列出每种类型及其内部名称和大小,如果是枚举类型则允许的值及其关联的权限。
403
404 默认情况下,仅显示用户创建的对象。 提供一个模式或`S`修饰符以包含系统对象。
405
406 \\du\[+\] \[`role_pattern`\]
407 : 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此此命令现在等效于`\dg`。)如果指定了模式,则仅列出名称与模式匹配的角色。
408
409 如果使用`\du+`形式,则会显示有关每个角色的其他信息; 目前,这会为每个角色添加注释。
410
411 \\dx\[+\] \[`extension_pattern`\]
412 : 列出已安装的扩展。 如果指定了模式,则仅列出名称与该模式匹配的扩展名。 如果使用`\dx+`形式,则列出属于每个匹配扩展的所有对象。
413
414 \\dy\[+\] \[`pattern`\]
415 : 列出事件触发器。 如果指定了模式,则仅列出其名称与该模式匹配的触发器。 如果在命令名称后附加`+`,则会列出每个对象及其相关描述。
416
417 \\e | \\edit \[`filename`\] \[`line_number`\]
418 : 如果指定`filename`,则文件被编辑;编辑器退出后,其内容将复制回查询缓冲区。如果未提供`filename`,则将当前查询缓冲区复制到一个临时文件,然后以相同的方式对其进行编辑。
419
420 然后根据`ssql`的常规规则重新解析新的查询缓冲区,其中整个缓冲区被视为一行。(因此,不能以这种方式制作脚本。为此请使用`\i`。) 这也意味着,如果查询以分号结尾(或包含分号),则会立即执行该查询。在其他情况下,它将仅在查询缓冲区中等待;输入分号或`\g`发送,或`\r`取消。
421
422 如果指定了行号,则`ssql`将光标定位在文件或查询缓冲区的指定行上。请注意,如果给出单个全数字参数,则`ssql`假定它是行号,而不是文件名。
423
424 \\echo `text` \[ ... \]
425 : 将参数输出到标准输出,中间用一个空格分隔,后跟换行符。 这对于在脚本输出中散布信息很有用。
426 如果第一个参数是未加引号的`-n`,则不写结尾的换行符。
427
428
429 * **注意**: 如果使用`\o`命令重定向查询输出,则可能希望使用`\qecho`代替此命令。
430
431 \\ef \[`function_description` \[`line_number`\]\]
432 : 该命令以`CREATE OR REPLACE FUNCTION`命令的形式获取并编辑命名函数的定义。 编辑的方式与`\edit`相同。编辑器退出后,更新的命令在查询缓冲区中等待;输入分号或`\g`发送,或`\r`取消。
433
434 目标函数可以仅通过名称指定,也可以通过名称和参数指定,例如`foo(integer, text)`。如果有多个具有相同名称的函数,则必须给出参数类型。
435
436 如果未指定任何函数,则会显示空白的`CREATE FUNCTION`模板以供编辑。
437
438 如果指定了行号,则`ssql`将光标定位在函数主体的指定行上。 (请注意,函数主体通常不在文件的第一行开始。)
439
440 \\encoding \[`encoding`\]
441 : 设置客户端字符集编码。如果不带参数,此命令将显示当前编码。
442
443 \\f \[`field_separator_string`\]
444 : 为未对齐的查询输出设置字段分隔符。 默认值为竖线(`|`)。 另请参阅`\pset`以获取设置输出选项的通用方法。
445
446 \\g \[`filename`\] \| \\g \[ `|` `command` \]
447 : 将当前查询输入缓冲区发送到服务器,并有选择地将查询的输出存储到`filename`中,或将输出通过管道传递给shell命令`command`。
448 仅当查询成功返回零个或多个元组时,才写入文件或命令,如果查询失败或是不返回数据的SQL命令,则不写入文件或命令。
449
450 裸`\g`本质上等效于分号。 带参数的`\g`是`\o`命令的一次性替代方案。
451
452 \\gset \[`prefix`\]
453 : 将当前查询输入缓冲区发送到服务器,并将查询的输出存储到`ssql`变量中。 要执行的查询必须恰好返回一行。
454
455 该行的每一列都存储在一个单独的变量中,该变量与该列相同。 例如:
456
457 ``` bash
458 => SELECT 'hello' AS var1, 10 AS var2;
459 -> \gset
460 => \echo :var1 :var2
461 hello 10
462 ```
463
464 如果指定`prefix`,则在查询的列名称之前添加该字符串以创建要使用的变量名称:
465
466 ``` bash
467 => SELECT 'hello' AS var1, 10 AS var2;
468 -> \gset result_
469 => \echo :result_var1 :result_var2
470 hello 10
471 ```
472
473 如果列结果为NULL,那么对应的变量是未设置的。
474
475 如果查询失败或不返回一行,则不会更改任何变量。
476
477 \\h | \\help \[`sql_command`\]
478 : 提供有关指定SQL命令的语法帮助。 如果未指定命令,则`ssql`将列出所有可使用语法帮助的命令。如果`command`是星号(`*`),则会显示所有SQL命令的语法帮助。为了简化键入,不必引用由几个单词组成的命令。
479
480 \\H | \\html
481 : 打开HTML查询输出格式。 如果HTML格式已打开,则将其切换回默认的对齐文本格式。此命令是为了兼容性和方便起见,但有关设置其他输出选项的信息,请参见`\pset`。
482
483 \\i | \\include `filename`
484 : 从文件`filename`中读取输入,并像在键盘上键入文件一样执行它。
485
486 如果`filename`是`-`(连字符),则将读取标准输入,直到EOF指示或`\q`元命令为止。这可用于将交互式输入与文件输入进行穿插。请注意,只有在最外层处于活动状态时,才会使用Readline行为。
487
488 如果要在阅读时看到屏幕上的行,必须将变量`ECHO`设置为`all`。
489
490 \\ir | \\include_relative `filename`
491 : `\ir`命令类似于`\i`,但是以不同的方式解析相对文件名。 在交互模式下执行时,两个命令的行为相同。但是,从脚本调用时,`\ir`会相对于脚本所在目录而不是当前工作目录来解释文件名。
492
493 \\l\[+\] | \\list\[+\] \[`pattern`\]
494 : 列出服务器中的数据库,并显示其名称,所有者,字符集编码和访问特权。 如果指定了模式,则仅列出名称与该模式匹配的数据库。如果在命令名称后附加`+`,则还会显示数据库大小,默认表空间和描述。(大小信息仅适用于当前用户可以连接到的数据库。)
495
496 \\lo_export `loid` `filename`
497 : 从数据库读取OID `loid`的大对象,并将其写入`filename`。请注意,这与服务器函数`lo_export`稍有不同,后者以数据库服务器运行的用户权限和服务器文件系统上的用户权限运行。 使用`\lo_list`找出大对象的OID。
498
499 \\lo_import `large_object_filename` \[`comment`\]
500 : 将文件存储到大对象中。 (可选)它将给定的注释与对象相关联。例:
501
502 ``` bash
503 mydb=> \lo_import '/home/palopg/pictures/photo.xcf' 'a
504 picture of me'
505 lo_import 152801
506 ```
507
508 该响应表明大对象接收到对象ID 152801,如果要再次访问该对象,应该记住该对象。 因此,建议始终将可读的注释与每个对象相关联。 然后可以使用`\lo_list`命令查看这些内容。 请注意,此命令与服务器端`lo_import`略有不同,因为它充当本地文件系统上的本地用户,而不是服务器的用户和文件系统。
509
510 \\lo_list
511 : 显示当前存储在数据库中的所有大型对象的列表,以及为其提供的任何注释。
512
513
514 \\lo_unlink `largeobject_oid`
515 : 从数据库中删除指定OID的大对象。使用`\lo_list`找出大对象的OID。
516
517
518 \\o | \\out \[ `filename` \] \| \\o | \\out \[ `|` `command` \]
519 : 将将来的查询结果保存到`filename`,或将将来的结果通过管道传递给shell命令`command`。如果未指定任何参数,则查询输出将重置为标准输出。
520
521 查询结果包括从数据库服务器获得的所有表,命令响应和通知,以及查询数据库的各种反斜杠命令的输出(例如`\d`),但不包括错误消息。要在查询结果之间插入文本输出,请使用`\qecho`。
522
523 \\p
524 : 将当前查询缓冲区打印到标准输出。
525
526 \\password \[`username`\]
527 : 更改指定用户(默认情况下为当前用户)的密码。 该命令提示输入新密码,对其进行加密,然后将其作为`ALTER ROLE`命令发送到服务器。这样可以确保新密码不会在命令历史记录,服务器日志或其他地方以明文形式出现。
528
529 \\prompt \[ `text` \] `name`
530 : 提示用户提供文本,该文本已分配给变量`name`。 可以指定一个可选的提示字符串,`text`。(对于多字提示,请用单引号将文本引起来。)
531
532 默认情况下,`\prompt`使用终端进行输入和输出。 但是,如果使用`-f`命令行开关,`\prompt`将使用标准输入和标准输出。
533
534 \\pset \[`print_option` \[`value`\]\]
535 : 此命令设置影响查询结果表输出的选项。 `print_option`描述了要设置的选项。 `value`的语义取决于所选选项。对于某些选项,省略`value`会导致该选项被切换或取消设置,如特定选项所述。如果未提及此类行为,则省略`value`只会导致显示当前设置。
536
537 没有任何参数的`\pset`将显示所有打印选项的当前状态。
538
539 可调打印选项包括:
540
541 border `value`
542 : `value`必须是一个数字。通常,数字越大,表就有越宽的边界和越多的线,但是这个参数取决于实际的格式。
543
544 在HTML格式中,这个参数会直接翻译成`border=...`属性,在其它的格式中,只有值`0`(无边界)、`1`(内部分隔线)、`2`(表框架)有意义。
545
546 `latex`和`latex-longtable`也支持`border`值为3,在每行之间添加一个分隔线。
547
548 `columns`
549 : 设置`wrapped`格式的目标宽度,以及用于确定输出是否足够宽以要求分页或在扩展自动模式下切换到垂直显示的宽度限制。默认值为零。 零导致目标宽度由环境变量`COLUMNS`控制,如果未设置`COLUMNS`,则检测到的屏幕宽度。 另外,如果`columns`为零,则`wrapped`格式仅影响屏幕输出。
550
551 如果`columns`不为零,则文件和管道输出也将被包装为该宽度。
552
553 设置目标宽度后,请使用`\pset format wrapped`命令启用包装格式。
554
555 `expanded` \| `x`
556 : 如果指定了`value`,则必须是`on`或`off`,这将启用或禁用扩展模式或`auto`。如果省略`value`,该命令将在`on`和`off`设置之间切换。
557
558 启用扩展模式后,查询结果将显示在两列中,列名在左侧,数据在右侧。如果在正常的“水平”模式下数据无法显示在屏幕上,则此模式很有用。
559
560 在`auto`设置中,只要查询输出比屏幕宽,就使用扩展模式,否则使用常规模式。`auto`设置仅在对齐和包装的格式中有效。 在其他格式下,它始终表现为关闭扩展模式。
561
562 `fieldsep`
563 : 指定在未对齐输出模式下使用的字段分隔符。这样,就可以创建制表符或逗号分隔的输出,而其他程序可能更喜欢这种输出。
564
565 要将选项卡设置为字段分隔符,请键入`\pset fieldsep '\t'`。 默认字段分隔符为`'|'`(竖线)。
566
567 `fieldsep_zero`
568 : 设置非对齐输出格式中使用的域分隔符为0字节。
569
570 `footer`
571 : 如果指定了`value`,则必须将其打开或关闭,这将启用或禁用表脚的显示((`n`行)计数)。如果省略`value`,则该命令将打开或关闭页脚显示。
572
573 `format`
574 : 将输出格式设置为`unaligned`,`aligned`,`html`,`latex`(使用`tabular`),`latex-longtable`,`troff-ms`或`wrapped`之一。
575
576 允许使用唯一的缩写,包括一个字母。
577
578 * `unaligned`格式将一行的所有列写在一行上,由当前活动的字段分隔符分隔。这对于创建可能打算由其他程序读取的输出(例如,制表符分隔或逗号分隔的格式)很有用。
579
580 * `aligned`格式是标准的,人类可读的,格式良好的文本输出;这是默认值。
581
582 * `html`,`latex`,`latex-longtable`和`troff-ms`模式把表输出为可用于文档里的对应标记语言。它们还不是完整的文档! (可能对于HTML变化还不是太大,但是在LaTeX中,您必须具有完整的文档包装器。`latex-longtable`也需要LaTeX `longtable`和`booktabs`软件包。)
583
584 * `wrapped`格式类似于`aligned`,但是在行之间包装宽数据值以使输出适合目标列宽。目标宽度是根据`columns`选项下所述确定的。 请注意,`ssql`不会尝试包装列标题。 如果列标题所需的总宽度超过目标,则`wrapped`格式与`aligned`的行为相同。
585
586 `linestyle` \[`unicode` \| `ascii` \| `old-ascii`\]
587 : 将边界线绘制样式设置为unicode,ascii或old-ascii中的一种。三种样式允许使用唯一的缩写,包括一个字母。 默认设置为`ascii`。此选项仅影响`aligned`和`wrapped`的输出格式。
588
589 * `ascii` – 使用纯ASCII字符。 数据中的换行符在右边距中使用`+`符号显示。当换行格式将数据从一行换行到下一行而没有换行符时,在第一行的右边距中显示一个点(`.`),在下一行的左边距中再次显示一个点(`.`)。
590
591 * `old-ascii` – 样式使用纯ASCII字符,并使用PostgreSQL 8.4及更早版本中使用的格式样式。数据中的换行符用`:`符号代替左侧的列分隔符。当数据从一行到另一行的换行而没有换行符时,`;`符号用于代替左侧的列分隔符。
592
593 * `unicode` – 样式使用Unicode框画字符。 数据中的换行符在右边缘使用回车符显示。当数据从一行换行到下一行而没有换行符时,在第一行的右边距中显示省略号,并在下一行的左边距中显示省略号。
594
595 当`border`设置大于零时,此选项还确定绘制边框线所使用的字符。纯ASCII字符在任何地方都可以使用,但是Unicode字符在可以识别它们的显示器上看起来更好。
596
597 `null 'string'`
598 : 第二个参数是一列为空时要打印的字符串。默认设置为不打印任何内容,这很容易被误认为是空字符串。
599
600 例如,可能更喜欢`\pset null '(null)'`。
601
602 `numericlocale`
603 : 如果指定了`value`,则必须将其打开或关闭,这将启用或禁用显示特定于语言的字符以将小数点标记左侧的数字组分开。如果省略`value`,则该命令在常规和特定于区域的数字输出之间切换。
604
605 `pager`
606 : 控制用于查询和`ssql`帮助输出的分页器程序的使用。如果设置了环境变量`PAGER`,则将输出通过管道传递到指定的程序。否则,将使用依赖于平台的默认值(例如`more`)。禁用时,不使用分页器程序。 启用时,仅在适当的时候使用分页器,即当输出到终端且不匹配屏幕时。也可以将分页器设置为`always`,这将使该分页器用于所有终端输出,而不管其是否适合屏幕显示。
607
608 `\pset pager`(不带`value`)可打开和关闭分页器的使用。
609
610 `recordsep`
611 : 声明在非对齐模式时的记录分隔符。缺省是换行符。
612
613 `recordsep_zero`
614 : 设置在非对齐输出格式中使用的记录分隔符为0字节。
615
616 `tableattr` | `T` \[`text`\]
617 : 在HTML格式下,这指定了要放置在`table`标签中的属性。 例如`cellpadding`或`bgcolor`。请注意,你可能不需要在这里声明`border`,因为已经在`\pset border`里用过了。如果没有给出`value`,那么表的属性是未设置的。
618
619 在`latex-longtable`格式中,这控制每个包含左对齐数据类型的字段的比例宽度。它声明为空白分隔的值列表,比如`'0.2 0.2 0.6'`。未指定的输出列使用最后指定的值。
620
621 `title` \[`text`\]
622 : 为任何随后打印的表设置标题。 这个参数可以用于给你的输出一个描述性标记。如果没有给出`value`,则标题未设置。
623
624 `tuples_only` \| `t` \[`novalue` | `on` | `off`\]
625 : 如果指定了`value`,那么必须是`on`或`off`,这将启用或禁用仅元组模式。如果省略了`value`,那么该命令在普通和仅元组输出间切换。 普通输出包括额外的信息,比如列头、标题、各种脚注等。
626
627 在仅元组模式下,只显示实际的表数据。
628
629 `\t`命令等效于`\pset``tuples_only`,并且为方便起见而提供。
630
631
632 有很多用于`\pset`的快速命令。 参阅`\a`, `\C`, `\f`, `\H`, `\t`, `\T`和`\x`。
633
634 \\q | \\quit
635 : 退出`ssql`程序。在脚本文件中,仅终止该脚本的执行。
636
637 \\qecho `text` \[ ... \]
638 : 此命令与`\echo`相同,除了输出将被写入`\o`设置的查询输出通道外。
639
640 \\r | \\reset
641 : 重置(清除)查询缓冲区。
642
643 \\s \[`filename`\]
644 : 将`ssql`的命令行历史记录打印到`filename`。
645 如果省略`filename`,则将历史记录写入标准输出(如果合适,使用分页器)。
646 如果`ssql`是在没有`Readline`支持的情况下构建的,则此命令不可用。
647
648 \\set \[`name` \[`value` \[ ... \]\]\]
649 : 将`ssql`变量`name`设置为`value`,或者如果给定多个值,则将其全部串联。 如果仅给出一个参数,则该变量将设置为空值。
650
651 要取消设置变量,请使用`\unset`命令。
652
653 没有任何参数的`\set`将显示所有当前设置的`ssql`变量的名称和值。
654
655 有效的变量名称可以包含字符,数字和下划线。
656
657 变量名称区分大小写。
658
659 尽管你可以设置任何变量为任意值,`ssql`对一些变量特殊对待。 它们在关于变量的小节里面有文档。
660
661 该命令与SQL命令`SET`无关。
662
663 \\setenv `name` \[ `value` \]
664 : 将环境变量`name`设置为`value`, 或者如果未提供该`value`,则取消设置环境变量。例:
665
666 ``` sql
667 testdb=> \setenv PAGER less
668 testdb=> \setenv LESS -imx4F
669 ```
670
671 \\sf\[+\] `function_description`
672 : 该命令以`CREATE OR REPLACE FUNCTION`命令的形式获取并显示命名函数的定义。定义将打印到`\o`设置的当前查询输出通道。
673
674 目标函数可以仅通过名称指定,也可以通过名称和参数指定,例如`foo(integer, text)`。如果有多个相同名称的函数,则必须提供参数类型。
675
676 如果在命令名称后附加`+`,则对输出行进行编号,函数主体的第一行为行1。
677
678 \\t \[novalue | on \| off\]
679 : `\t`命令本身可切换输出列名称标题和行计数页脚的显示。 无论当前设置如何,打开和关闭的值都会设置元组显示。 此命令等效于`\pset tuples_only`,并且为方便起见而提供。
680
681 \\T `table_options`
682 : 声明HTML输出格式中放在`table`标记里的属性。 此命令等效于`\pset tableattr table_options`
683
684 \\timing \[novalue \| on \| off\]
685 : 如果没有参数,则以毫秒为单位切换显示每个SQL语句花费的时间。 无论当前设置如何,打开和关闭的值都会设置时间显示。
686
687 \\unset `name`
688 : 取消设置(删除)`ssql`变量`name`。
689
690 \\w | \\write `filename` \| \\w | \\write `|` `command`
691 : 将当前查询缓冲区输出到`filename`或将其通过管道传递给shell命令`command`。
692
693 \\watch \[`seconds`\]
694 : 重复执行当前查询缓冲区(如`\g`),直到被中断或查询失败。 在两次执行之间等待指定的秒数(默认为2)。
695
696 \\x \[ on \| off \| auto \]
697 : 设置或切换扩展表格式设置模式。 因此,它等效于`\pset expanded`。
698
699 \\z \[`pattern`\]
700 : 列出具有相关访问权限的表,视图和序列。 如果指定了模式,则仅列出名称与该模式匹配的表,视图和序列。 这是`\dp`的别名。
701
702 \\\! \[`command`\]
703 : 转义到单独的shell或执行shell命令`command`。 参数不会被进一步解释,shell 将看到全部参数。
704 特别是,变量替换规则和反斜杠转义不适用。
705
706 \\?
707 : 显示有关`ssql`反斜杠命令的帮助信息。
708
709
710模式
711: 各种`\d`命令都接受一个pattern参数,声明要显示的对象名字。 最简单的情况下pattern正好等于对象的名字。pattern中的字符通常会被自动转换成小写,就像SQL名字一样。 例如`\dt FOO`将显示名为`foo`的表。与在SQL名字中相同的是双引号界定的pattern将保持原样(不做大小写转换)。如果需要在双引号界定的pattern中使用双引号字符,你可以写两个并列的双引号,这与SQL的引号规则相同。
712
713 例如,`\dt "FOO""BAR"`将会显示名为`FOO"BAR`的表,但是不会显示`foo"bar`。与一般的SQL名字规则不同的是,你可以仅用双引号界定名字的一部分,例如`\dt FOO"FOO"BAR`将显示名为`fooFOObar`的表。
714
715 在模式中,`*`匹配任何字符序列(包括无字符)和`?`匹配任何单个字符。 (此表示法可与UNIX Shell文件名模式相提并论。)例如,`\dt int*`显示名称以`int`开头的所有表。 但是在双引号内,`*`和`?`失去了这些特殊含义,只是字面上的匹配。
716
717 包含点(`.`)的模式被解释为模式名称模式,后跟对象名称模式。 例如,`\dt foo*.bar*`将显示其表名以`bar`开头的所有表,这些表的模式名以`foo`开头。如果没有点出现,则该模式仅匹配在当前模式搜索路径中可见的对象。 同样,双引号中的点失去其特殊含义,并且在字面上匹配。
718
719 高级用户可以使用正则表达式。 除了`.`如上所述被当做分隔符,`*`将被理解成`.*`,`?`将被理解成`.`,所有正则表达式特殊字符均按PG正则表达式的规定工作。这样一来,你就可以用`?`代替`.`、 用`(R+|)`代替`R*`、 用`(R|)`代替`R?`。
720
721 请记住,模式必须匹配全名,这与对正则表达式的通常解释不同;如果您不希望锚定模式,请在开头和/或结尾处输入`*`。
722
723 请注意,在双引号中,所有正则表达式特殊字符都会失去其特殊含义,并且会在字面上进行匹配。同样,正则表达式特殊字符在运算符名称模式(例如`\do`的参数)中按字面值进行匹配。
724
725 每当完全省略pattern参数时,`\d`命令都会显示在当前模式搜索路径中可见的所有对象 – 这等效于使用模式`*`。要查看数据库中的所有对象,请使用模式`*.*`。
726
727
728高级特性
729: 以下是ssql支持的高级特性说明
730
731 * **变量**
732
733 `ssql`提供类似通常Unix命令shell那样的变量替换特性。 变量只是简单的名称/值对,这里的值可以是任何长度的任何值。名字必须由字母(包括非拉丁字母)、数字和下划线组成。
734
735 要设置一个变量,使用ssql元命令`\set`。例如:
736
737 ``` sql
738 testdb=> \set foo bar
739 ```
740
741 把变量`foo`的值设置为`bar`。 要检索变量的内容,在变量名前面放上冒号,例如:
742
743 ``` sql
744 testdb=> \echo :foo
745 bar
746 ```
747
748 这在SQL命令和元命令中都能运行。
749
750 如果你不带第二个参数调用`\set`,那么设置这个变量,带有一个空字符串作为`value`。要重置(也就是删除)一个变量,使用`\unset`命令。要显示所有变量的值,不带有任何参数调用`\set`。
751
752 注意: `\set`的参数服从和其它命令一样的替换规则。因此可以构造有趣的引用,像`\set :foo 'something'`这样,获得分别像Perl或PHP那样有名的"软连接"或"变量变量"。不幸的是,用这些构造不能做任何有用的事情。 另一方面,`\set bar :foo`是一个非常有效的拷贝变量的方法。
753
754
755 有一些常用变量被`ssql`特殊相待。它们代表特定的选项设置,这些选项在运行时可以通过改变变量的值而改变,或者在某些情况下代表`ssql`的可变状态。尽管可以把这些变量用于其它用途,但是不鼓励这么做,因为程序的行为可能会变得非常奇怪。通常,所有特殊对待的变量名都是由大写ASCII字母组成(可能还有数字和下划线)。为了保证和未来的最大限度的兼容性,请避免使用这样的变量。 下面是一个所有特殊对待的变量列表。
756
757 AUTOCOMMIT
758 : 启用时(默认),成功完成后将自动提交每个SQL命令。 要以这种方式推迟提交,必须输入`BEGIN`或`START TRANSACTION` SQL命令。 禁用或未设置时,除非明确发出`COMMIT`或`END`,否则不会提交SQL命令。
759
760 自动提交模式的工作方式是:在任何尚未在事务块中且本身不是`BEGIN`或其他事务控制命令的命令或无法在事务块内部执行的命令之前(例如`VACUUM`),发出隐式`BEGIN`。
761
762 在自动提交模式下,必须通过输入`ABORT`或`ROLLBACK`明确放弃任何失败的事务。另外请记住,如果退出会话而不提交,则您的工作将会丢失。
763
764 自动提交模式是PalopgSQL的传统行为,但是自动提交模式更接近SQL规范。如果喜欢关闭自动提交,在`~/.ssqlrc`文件中进行设置。
765
766 COMP_KEYWORD_CASE
767 : 在完成SQL关键字时决定哪个字母使用大小写。 如果设置为`lower`或`upper`,则完成的单词将分别为小写或大写。如果设置为`preserve-lower`或`preserve-upper`(缺省),那么完成的单词将是输入时的情况,但是单词在没有任何输入的情况下完成,将分别是小写或大写的情况。
768
769 DBNAME
770 : 正在连接着的数据库名称。 每次与一个数据库联结都会设置这个值(包括程序启动),但是可以删除。
771
772 ECHO
773 : 如果设为`all`,那么所有非空输入行在读取时都回显到标准输出。 (这不适用于交互式读取的行。)使用`-a`选项声明在程序启动时就默认这样做。如果设置为queries,那么`ssql`只是在查询发送给服务器时打印到标准输出。 这个开关是`-e`。
774
775 ECHO_HIDDEN
776 : 当此变量设置为`on`并且反斜杠命令查询数据库时,将首先显示该查询。此特性可帮助您研究PalopgMPP数据库的内部结构,并在您自己的程序中提供类似的功能。(要在程序启动时选择此行为,请使用开关`-E`。)如果将变量设置为值`noexec`,则仅显示查询,但实际上并未将其发送到服务器并执行查询。
777
778 ENCODING
779 : 当前的客户端字符集编码。
780
781 FETCH_COUNT
782 : 如果将此变量设置为大于0的整数值,则将提取`SELECT`查询的结果并将其显示在这么多行的组中,而不是在显示之前收集整个结果集的默认行为。因此,无论结果集的大小如何,仅使用有限的内存量。 启用此功能时,通常使用100到1000的设置。请记住,使用此功能时,在显示了一些行后查询可能会失败。
783
784 尽管可以使用此特性使用任何输出格式,但是默认的对齐格式看起来很糟糕,因为每组`FETCH_COUNT`行将分别设置格式,从而导致各行组的列宽变化。不过对于其他格式这个特性工作的很好。
785
786 HISTCONTROL
787 : 如果将这个变量设为`ignorespace`,那么以空格开始的行将不会进入历史列表。如果设置为`ignoredups`,那么与以前历史记录里匹配的行也不会进入历史记录。值`ignoreboth`是上面两个的结合。 如果删除此变量或者其值为任何与上面的值不同的东西,所有交互模式读入的行都被保存入历史列表。
788
789 HISTFILE
790 : 此文件将用于存储历史列表。 默认值是`~/.ssql_history`。 例如,在`~/.ssqlrc`里使用:
791
792 ``` sql
793 \set HISTFILE ~/.ssql_history- :DBNAME
794 ```
795
796 将使得`ssql`为每个数据库维护一个独立的历史。
797
798 HISTSIZE
799 : 保存在命令历史里的命令的个数。缺省值是500 。
800
801 HOST
802 : 当前你正连接的数据库服务器主机。 这是在每次你与数据库连接时(包括程序启动)设置的,但是可以删除。
803
804 IGNOREEOF
805 : 如果删除此变量,向一个交互的`ssql`会话发送一个`EOF`(通常是`CTRL+D`)将终止应用。如果设置为一个数字值,那么在应用终止前该数值的`EOF`字符将被忽略。如果设置了此变量但是没有数字值,缺省是`10`。
806
807 LASTOID
808 : 最后影响的OID值,即为从一条`INSERT`或`lo_import`命令返回的值。 此变量只保证在下一条SQL命令的结果显示之前有效。
809
810 ON_ERROR_ROLLBACK
811 : 当设置为`on`时,如果一个事务块里的语句产生错误,这个错误将被忽略而事务将继续。当设置为`interactive`时,这样的错误只是在交互的会话里忽略,而不是在从读取脚本文件的时候。如果未设置或者设置为`off`,事务块里一个语句生成的错误将会中止整个事务。错误回滚的模式是通过在一个事务块的每个命令前为你隐含地发出一个`SAVEPOINT`的方式工作的,在命令错误的时候回滚到该保存点。
812
813 ON_ERROR_STOP
814 : 缺省时,遇到错误后命令处理继续进行。 当这个变量设置为`on`,处理会立即停止。在交互模式下,`ssql`将返回到命令提示符;否则,`ssql`将退出,并返回错误代码3,以示这个情况与致命错误条件的区别,致命错误条件的错误代码为1。不管在哪种情况下,任何当前运行的脚本(顶级脚本,如果有,和任何它调用的其他脚本)都将立即终止。如果顶级命令字符串包含多个SQL命令,处理将在当前命令停止。
815
816 PORT
817 : 当前你正在连接的数据库服务器的端口。这是在每次你与数据库连接时 (包括程序启动)设置的,但是可以取消设置。
818
819 PROMPT1 PROMPT2 PROMPT3
820 : 这些指明`ssql`显示的提示符如何显示。参阅下面的提示符。
821
822 QUIET
823 : 设置这个变量为`on`,等效于命令行选项`-q`。可能在交互模式下没有什么用。
824
825 SINGLELINE
826 : 此变量等效于命令行选项`-S`。
827
828 SINGLESTEP
829 : 将此变量设置为`on`等效于命令行选项`-s`。
830
831 USER
832 : 当前连接的数据库用户。每次您连接到数据库(包括程序启动)时都会进行设置,但是可以取消设置。
833
834 VERBOSITY
835 : 可以将此变量设置为`default`,`verbose`或`terse`值,以控制错误报告的详细程度。
836
837
838
839 * **SQL代换**
840
841 `ssql`变量的关键特性是你可以把它们替换成正规的SQL语句,也可以是元命令的参数。另外,`ssql`提供工具确保变量值用作SQL文本并且正确的引用标识符。不用引用替换一个值的语法是在变量名前面加一个冒号(`:`)。例如:
842
843 ``` sql
844 testdb=> \set foo 'my_table'
845 testdb=> SELECT * FROM :foo;
846 ```
847
848 将会查询`my_table`表。 请注意,这可能是不安全的:变量的值是逐字拷贝的,所以它甚至可以包含不对称的引号或反斜杠命令。必须保证你输入的东西是有意义的。
849
850
851
852 当一个值被用作SQL文本或标识符时,将其引用是最安全的。 要引用一个变量的值作为SQL文本,在单引号中的变量名后面写一个冒号。要引用值作为SQL标识符,在双引号中的变量名后面写一个冒号。 这些构造正确的处理引号和嵌入在变量值中的其他特殊字符。
853
854 上面的例子这样写更安全:
855
856 ``` sql
857 testdb=> \set foo 'my_table'
858 testdb=> SELECT * FROM :"foo";
859 ```
860
861
862 变量替换将不在引用的SQL文本和标识符中执行。 因此,一个构造比如`':foo'`并不从变量的值中产生一个引用的文本(如果它确实发生了,那么它是不安全的,因为它不会正确的处理嵌入在值中的引号。)
863
864 使用这个机制的一个例子是����贝一个文件的内容到一个表字段中。 首先加载文件到一个变量,然后替换变量的值为引用的字符串:
865
866 ``` sql
867 testdb=> \set content `cat my_file.txt`
868 testdb=> INSERT INTO my_table VALUES (:'content');
869 ```
870
871 (注意,如果`my_file.txt`包含`NUL`字节,则仍然无法使用。 `ssql`在变量值中不支持嵌入的`NUL`字节。)
872
873 由于冒号可以合法地出现在SQL命令中,因此除非当前设置了命名变量,否则不会替换明显的插值尝试(即`:name`,`:'name'`或`:"name"`)。无论如何,都可以使用反斜杠转义冒号,以防止其被替换。
874
875 变量的冒号语法符合诸如ECPG之类的嵌入式查询语言的SQL标准。数组切片和类型转换的冒号语法是PalopgMPP数据库扩展,有时可能与标准用法冲突。将变量值转义为SQL文字或标识符的冒号引用语法是`ssql`扩展。
876
877
878
879 * **提示符**
880
881 可以根据您的喜好自定义`ssql`提示符。三个变量`PROMPT1`,`PROMPT2`和`PROMPT3`包含字符串和特殊的转义序列,用于描述提示符的外观。`PROMPT1`是`ssql`请求新命令时显示的普通提示。当在命令输入期间需要更多输入时(例如,因为命令未使用分号终止或未关闭引号),将显示`PROMPT2`。当您运行SQL `COPY FROM STDIN`命令并且您需要在终端上输入行值时,将显示`PROMPT3`。
882
883 所选提示变量的值按字面意义打印,除非遇到百分号(`%`)。 根据下一个字符,某些其他文本将被替换。 定义的替换是:
884
885 %M
886 : 数据库服务器的完整主机名(带有域名),如果连接是通过UNIX域套接字的,则为`[local]`;如果UNIX域套接字的默认设置为未编译的默认位置,则为`[local:/dir/name]`。
887
888 %m
889 : 数据库服务器的主机名,在第一个点处被截断,如果连接是通过UNIX域套接字的,则为`[local]`。
890
891 %\>
892 : 数据库服务器正在侦听的端口号。
893
894 %n
895 : 数据库会话用户名。 (此值的扩展可能在数据库会话期间由于命令`SET SESSION AUTHORIZATION`的结果而改变。)
896
897 %/
898 : 当前数据库的名称。
899
900 %\~
901 : 与`%/`类似,但是如果数据库是您的默认数据库,则输出为`~`(波浪号)。
902
903 %\#
904 : 如果会话用户是数据库管理员,则为**\#**,否则为**\>**。 (此值的扩展可能在数据库会话期间由于命令`SET SESSION AUTHORIZATION`的结果而改变。)
905
906 %R
907 : 在`PROMPT1`中通常为`=`,但在单行模式下为`^`或`!`如果会话与数据库断开连接(如果`\connect`失败,则可能发生)。在`PROMPT2`中,`%R`被一个字符替换,该字符取决于`ssql`期望更多输入的原因: `-` 如果命令尚未终止; `*`如果有未完成的`/* ... */`注释; `'`,如果有一个未完成的带引号的字符串;`"`,如果有一个未完成的带引号的标识符;`$`,如果有一个未完成的带美元引号的字符串;或者`(`,如果有一个不匹配的左括号。 在`PROMPT3`中,`%R`不产生任何东西。
908
909 %x
910 : 事务状态:不在事务块中时为空字符串;在事务块中时为**\***;或**\!**当事务失败时;或**?**当事务状态不确定时(例如,因为没有连接)。
911
912 %digits
913 : 指示的八进制代码的字符被替换。
914
915 %:name:
916 : `ssql`变量`name`的值。 参阅高级特性中变量小节获取更多信息。
917
918 %\`command\`
919 : command的输出,类似于通常的反引号替换。
920
921 %\[ ... %\]
922 : 提示可能包含终端控制字符,例如,这些字符会更改提示文本的颜色,背景或样式,或更改终端窗口的标题。为了使行编辑正常工作,必须将这些非打印控制字符用`%[`和`%]`括起来以指定为不可见。提示中可能会出现多个这种配对。例如,
923
924 ``` sql
925 testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%#'
926 ```
927
928 会在兼容VT100的有颜色的终端上显示黑底黄字(`33;40`)的粗体(`1;`)。 要将百分号插入提示中,请输入`%%`。对于提示1和2,默认提示为`'%/%R%# '`,对于提示3,默认提示为`'>> '`。
929
930
931 * **命令行编辑**
932
933 `ssql`支持NetBSD libedit库,用于方便的行编辑和检索。
934
935 当`ssql`退出时,命令历史记录将自动保存,而在`ssql`启动时,将重新加载命令历史记录。
936
937 尽管补全逻辑不声称是SQL解析器,但也支持制表符补全。 制表符补全生成的查询也可能会干扰其他SQL命令,例如`SET TRANSACTION ISOLATION LEVEL`。 如果由于某种原因您不喜欢制表符补全,可以通过将其放在主目录中名为`.inputrc`的文件中来将其关闭:
938
939 ``` bash
940 $if ssql
941 set disable-completion on
942 $endif
943 ```
944
945
946
947环境变量
948: 以下是ssql命令使用涉及的相关环境变量
949
950 COLUMNS
951 : 如果`\pset columns`为零, 则控制换行格式的宽度和以确定宽度输出是需要分页器还是应在扩展自动模式下切换为垂直格式的宽度。
952
953 PAGER
954 : 如果查询结果无法显示在屏幕上,则通过此命令通过管道传递查询结果。 典型值为`more`或`less`。默认值取决于平台。
955
956 可以通过将`PAGER`设置为空或使用`\pset`命令中与分页器相关的选项来禁用该分页器的使用。
957
958 SDDATABASE SDHOST SDPORT SDUSER
959 : 默认连接参数。
960
961 SSQL_EDITOR EDITOR VISUAL
962 : `\e`和`\ef`命令使用的编辑器。 按照列出的顺序检查变量;使用设置的第一个。
963
964 内置的默认编辑器在Unix系统上为`vi`。
965
966 SSQL_EDITOR_LINENUMBER_ARG
967 : 当`\e`或`\ef`与行号参数一起使用时,此变量指定用于将起始行号传递给用户的编辑器的命令行参数。
968
969 对于Emacs或`vi`等编辑器,这是一个加号。
970
971 如果选项名称和行号之间需要有空格,请在变量的值中包含尾随空格。例子:
972
973 ``` bash
974 SSQL_EDITOR_LINENUMBER_ARG='+'
975 SSQL_EDITOR_LINENUMBER_ARG='--line '
976 ```
977
978 SSQL_HISTORY
979 : 命令历史记录文件的备用位置。进行波浪(`~`)扩展。
980
981 SSQLRC
982 : 用户的`.ssqlrc`文件的备用位置。进行波浪(〜)扩展。
983
984 SHELL
985 : 命令由`\!`命令执行。
986
987 TMPDIR
988 : 用于存储临时文件的目录。默认值为`/tmp`。
989
990
991相关文件
992: 以下是ssql命令运行涉及的相关文件
993
994 ssqlrc和\~/.ssqlrc
995 : 除非传递了`-X`或`-c`选项, 否则`ssql`在连接数据库之后接受正常的命令之前,尝试从系统范围的启动文件(`ssqlrc`),然后用户的启动文件(`~/.ssqlrc`)读取并执行命令。
996 系统范围的启动文件名为`ssqlrc`,可在安装的“系统配置”目录中查找, 该目录可以通过运行`sd_config --sysconfdir`来准确获取。 默认情况下,相对于包含PalopgMPP数据库可执行文件的目录,该目录为`../etc/ `。 可以通过`SDSYSCONFDIR`环境变量显式设置此目录的名称。
997
998 用户的个人启动文件名为`.ssqlrc`,在用户的主目录中查找。
999
1000 .ssql_history
1001 : 命令行历史存储在`~/.ssql_history`文件中。历史文件的位置可以通过`SSQL_HISTORY`环境变量来明确设置。
1002
1003
1004注解
1005: `ssql`与相同或较旧的主要版本的服务器一起使用时效果最佳。 如果服务器的版本比`ssql`本身新,则反斜杠命令很可能会失败。但是,`\d`系列的反斜杠命令可以与较旧的服务器版本一起使用,尽管不一定与`ssql`本身更新的服务器一起使用。运行SQL命令和显示查询结果的常规功能也应与较新的主要版本的服务器一起使用,但这不能在所有情况下都得到保证。
1006
1007 如果要使用`ssql`连接到多个具有不同主要版本的服务器,则建议使用最新版本的`ssql`。另外,您可以保留每个主要版本的`ssql`副本,并确保使用与各自服务器匹配的版本。但是在实践中,这种额外的复杂性应该没有必要。
1008
1009
1010
1011## 示例
1012
1013以交互方式启动`ssql`:
1014
1015 ``` bash
1016 ssql -p 54321 -U sally mydatabase
1017 ```
1018
1019 在`ssql`交互方式下,将命令分布在多行输入上。注意更改提示:
1020
1021 ``` sql
1022 testdb=> CREATE TABLE my_table (
1023 testdb(> first integer not null default 0,
1024 testdb(> second text)
1025 testdb-> ;
1026 CREATE TABLE
1027 ```
1028
1029 查看表定义:
1030
1031 ``` sql
1032 testdb=> \d my_table
1033 Table "my_table"
1034 Attribute | Type | Modifier
1035 -----------+---------+--------------------
1036 first | integer | not null default 0
1037 second | text |
1038 ```
1039
1040 通过传入包含SQL命令的文件,以非交互方式运行`ssql`:
1041
1042 ``` pre codeblock
1043 ssql -f /home/palopg/test/myscript.sql
1044 ```
评价此篇文章
