这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

变量

vsql 提供与常用 Linux 命令 shell 相似的变量替换功能。变量是名称/值对,其中值可以是任意长度的字符串。若要设置变量,请使用 vsql 元命令 \set:例如,以下语句将变量 fact 设置为值 dim

=> \set fact dim

如果您对变量调用 \set 并且不提供任何值,则该变量设置为空字符串。

获取变量

若要检索给定变量的内容,请在名称前面附加冒号,并将此用作斜杠命令的实参:例如:

=> \echo :fact
dim

未限定的 \set 命令会返回所有当前变量及其值:

dbadmin=> \set
VERSION = 'vsql'
AUTOCOMMIT = 'off'
VERBOSITY = 'default'
PROMPT1 = '%/%R%# '
PROMPT2 = '%/%R%# '
PROMPT3 = '>> '
ROWS_AT_A_TIME = '1000'
DBNAME = 'dbadmin'
USER = 'dbadmin'
PORT = '5433'
LOCALE = 'en_US@collation=binary'
HISTSIZE = '500'

删除变量

若要取消设置(删除)变量,请使用 vsql 元命令 \unset

变量命名约定

vsql 内部变量名称可以包含任意数量的字母、数字和下划线(而且它们可以按任何顺序出现)。vsql 会对某些内部变量进行特殊处理。这些变量指示可以在运行时通过更改变量的值来更改某些选项设置,或者表示应用程序的某种状态。虽然可以将这些变量用于任何其他用途,但建议您不要这样做。按照约定,所有特殊处理的变量均包含全大写字母(并且可能包含数字和下划线)。若要确保在将来具有最高兼容性,请避免将这些变量名称用于您自己的用途。

SQL 插值

您可以将 vsql 变量替换(“插值”)到常规 SQL 语句中。为此,可以在变量名称前加上冒号 (:)。例如,以下语句查询表 my_table

=> \set fact 'my_table'
=> SELECT * FROM :fact;

将逐字复制变量的值,因此,变量甚至可以包含不对称的引号或包含反斜杠命令。请确保将变量放置到能够起作用的位置。不会执行到带有引号的 SQL 实体的变量插值。存在一个例外:带有反引号 (````) 的字符串的内容会传递到系统 shell,并替换为 shell 的输出。请参阅下面的“使用反引号读取系统变量”。

使用反引号读取系统变量

在 vsql 中,反引号的内容会传递到系统 shell 进行解释(此行为与许多 UNIX shell 相同)。在设置 vsql 内部变量时,此行为特别有用,因为您可能需要访问 UNIX 系统变量(例如 HOME 或 TMPDIR)而非硬编码值。

例如,要将内部变量设置为 UNIX 用户目录中某个文件的完整路径,您可以使用反引号获取 HOME 系统变量(此变量是指向用户目录的完整路径)的内容:

=> \set inputfile `echo $HOME`/myinput.txt=> \echo :inputfile
/home/dbadmin/myinput.txt

反引号之内的内容会替换为在系统 shell 解释器中运行这些内容后的结果。在此示例中,echo $HOME 命令将返回 HOME 系统变量的内容。

1 - AUTOCOMMIT

当 AUTOCOMMIT 设置为“on”时,每个 SQL 命令会在成功完成后自动提交;例如:

\set AUTOCOMMIT on

若要在此模式下推迟 COMMIT,请将值设置为 off。

\set AUTOCOMMIT off

如果 AUTOCOMMIT 为空或定义为 off,则 SQL 命令不会提交,除非您显式发出 COMMIT。

注意

  • 默认情况下,AUTOCOMMIT 设置为 off。

  • AUTOCOMMIT 必须为大写,但其值(on 或 off)不区分大小写。

  • 在关闭自动提交模式下,您必须通过输入 ABORT 或 ROLLBACK 来显式放弃任何失败的事务。

  • 如果在未提交的情况下退出会话,将回退您所做的工作。

  • 对 vsql 变量的验证在运行这些变量时进行,而不在设置这些变量时进行。

  • 默认情况下,COPY 语句会在完成后提交,因此使用哪种 AUTOCOMMIT 模式并没什么影响,除非您发出 COPY NO COMMIT。请注意,DDL 语句会自动提交。

  • 若要确定 AUTOCOMMIT 设置为 on 还是 off,请发出以下 set 命令:

    $ \set...
    AUTOCOMMIT = 'off'
    ...
    
  • 如果 SELECT * FROM LOCKS 显示了来自刚才运行的语句的锁,则表示 AUTOCOMMIT 设置为 off。

    $ \set AUTOCOMMIT off
    $ \set
    ...
    AUTOCOMMIT = 'off'
    ...
    SELECT COUNT(*) FROM customer_dimension;
     count
    -------
     50000
    (1 row)
    SELECT node_names, object_name, lock_mode, lock_scope
    FROM LOCKS;
     node_names |      object_name         | lock_mode | lock_scope
    ------------+--------------------------+-----------+-------------
     site01     | Table:customer_dimension | S         | TRANSACTION
    (1 row)
    

2 - DBNAME

当前已连接到的数据库的名称。每次连接到数据库(包括程序启动)时都会设置 DBNAME,但也可以取消设置它。

3 - ECHO

如果设置为 all,则通过键盘或脚本输入的所有行会写入到标准输出,然后再解析或运行这些行。

若要在程序启动时选择此行为,请使用 -a 开关。如果设置为 queries,则 vsql 只会按照发送到服务器的内容输出所有查询。此行为的开关是 -e

4 - ECHO_HIDDEN

如果设置此变量,则当反斜杠命令查询数据库时,首先会显示查询。这样,您可以学习 Vertica 内部命令并在您自己的程序中提供相似功能。(若要在程序启动时选择此行为,请使用 -E 开关。)

如果将此变量设置为值 noexec,则只会显示查询,而实际上不会将查询发送到服务器,也不会运行查询。

5 - ENCODING

当前的客户端字符集编码。

6 - HISTCONTROL

如果此变量设置为 ignorespace,则以空格开头的行不会输入到历史记录列表中。如果此变量设置为值 ignoredups,则不会输入与上一个历史记录行匹配的行。值 ignoreboth 结合了两个选项。如果取消设置此变量,或者将此变量设置为前述值以外的任何其他值,则在交互模式下读取的所有行都会保存到历史记录列表中。

来源: Bash。

7 - HISTSIZE

设置用于存储命令历史记录的空间量。该值大致近似于 vsql 在其命令历史记录缓冲区中存储的命令数。此值仅影响当前 vsql 会话存储的行数。它不影响 .vsql_history 文件中存储的历史记录。

默认值为 500。

来源: Bash。

8 - 主机

当前连接到的数据库服务器主机。每次连接到数据库(包括程序启动)时都会设置它,但也可以取消该设置。

9 - IGNOREEOF

如果取消设置此变量,则向 vsql 的交互会话发送 EOF 字符(通常是按 Ctrl+D)会终止应用程序。如果将此变量设置为数值,则应用程序在终止之前会忽略许多 EOF 字符。如果设置了此变量但未提供任何数值,则默认值为 10。

来源: Bash。

10 - ON_ERROR_STOP

默认情况下,如果脚本命令生成错误(例如,由于命令格式不正确或数据格式无效),处理将继续进行。如果在脚本中将 ON_ERROR_STOP 设置为 ON,并且在处理期间发生错误,脚本将立即终止。

例如:

=> \set ON_ERROR_STOP ON

11 - PORT

当前连接到的数据库服务器端口。每次连接到数据库(包括程序启动)时都会设置此变量,但也可以取消设置此变量。

12 - PROMPT1 PROMPT2 PROMPT3

这些变量指定 vsql 所发出的提示的内容。有关详细信息,请参阅提示

13 - QUIET

此变量相当于命令行选项 -q。此变量在交互模式下可能不太有用。

14 - ROWS_AT_A_TIME

ROWS_AT_A_TIME 默认设置为 1000,并将结果检索为具有该大小的行块。第一个块的列格式设置用于所有块,因此在稍后的块中,有些条目可能会溢出。

设置结果的格式时,Vertica 会将 ROWS_AT_A_TIME 行缓冲到内存中,以计算最大列宽。如果任何字段值的长度超过前几个 ROWS_AT_A_TIME 行中出现的字段值,则初始提取之后的行可能未正确对齐。 ROWS_AT_A_TIME 可以使用 vsql 元命令 \unset 取消设置以保证正确对齐。不过,这要求将整个结果集重新缓冲到内存中,可能会在结果集太大时导致 vsql 失败。

15 - SINGLELINE

此变量相当于命令行选项 -S

16 - SINGLESTEP

此变量相当于命令行选项 -s

17 - 用户

当前用来进行连接的数据库用户。每次连接到数据库(包括程序启动)时都会设置它,但也可以取消该设置。

18 - VERBOSITY

此变量可以设置为值 defaultverboseterse,以控制错误报告的详细程度。

19 - VSQL_HOME

默认情况下,vsql 程序从用户的主目录读取配置文件。如果这么做不合适,可以通过设置 VSQL_HOME 环境变量来覆盖配置文件位置,而且设置 VSQL_HOME 环境变量时可以不需要修改共享资源。

在以下示例中,vsql 从 /tmp/jsmith 而非 ~ 读取配置信息。

# Make an alternate configuration file in /tmp/jsmith
mkdir -p /tmp/jsmith
echo "\\echo Using VSQLRC in tmp/jsmith" > /tmp/jsmith/.vsqlrc
# Note that nothing is echoed when invoked normally
vsql
# Note that the .vsqlrc is read and the following is
# displayed before the vsql prompt
#
# Using VSQLRC in tmp/jsmith
VSQL_HOME=/tmp/jsmith vsql

20 - VSQL_SSLMODE

VSQL_SSLMODE 指定客户端(例如 admintools)在连接到服务器时如何使用(或是否使用)SSL。默认值为 prefer,表示使用 SSL(如果服务器提供的话)。合法值为 requirepreferallowdisable。此变量的作用等于命令行选项 -m(或 --sslmode)。