Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何将psql元命令放入psql变量中,以便以后执行?_Postgresql_Psql - Fatal编程技术网

Postgresql 如何将psql元命令放入psql变量中,以便以后执行?

Postgresql 如何将psql元命令放入psql变量中,以便以后执行?,postgresql,psql,Postgresql,Psql,我通过将要运行的SQL放入psql变量中,为psql创建各种宏。我通过编写:variablename来“调用”宏 e、 g 到目前为止一切都很好 但现在我想切换一些psql设置作为我的宏的一部分。在这种情况下,我只想为这个查询设置unaligned tuples only模式,然后在最后恢复它 怎么做 不起作用: ERROR: syntax error at or near "a" LINE 1: a SELECT 1, 'string_literal'; ^ 到目前为止,我

我通过将要运行的SQL放入
psql
变量中,为
psql
创建各种宏。我通过编写
:variablename
来“调用”宏

e、 g

到目前为止一切都很好

但现在我想切换一些psql设置作为我的宏的一部分。在这种情况下,我只想为这个查询设置unaligned tuples only模式,然后在最后恢复它

怎么做

不起作用:

ERROR:  syntax error at or near "a"
LINE 1: a SELECT 1, 'string_literal';
        ^

到目前为止,我发现的最佳解决方案是在
psql
meta命令解析中使用以下行为:

  • 'single quotes'
    中的任何内容都会受到
    \n
    等的类似C字符串的反斜杠转义处理。这很重要,因为它意味着
    \a
    扩展为
    a
    \\a
    扩展为
    \a
  • 在单引号字符串中,单引号可以通过加倍来转义,就像在SQL文本中一样,因此
    '
    扩展为
    '
  • 在带引号的字符串之外,特殊序列
    \\
    标记元命令参数的结束,并恢复正常的SQL读取
因此,可以这样写:

psql=> \a\\ SELECT 1, 'string literal'; \a\\
Output format is unaligned.
?column?|?column?
1|string literal
(1 row)
Output format is aligned.
要将其放入
psql
变量中,请将其单引号,将反斜杠加倍,并将任何嵌入的单引号加倍:

psql=> \set example '\\a\\\\ SELECT 1, ''string literal''; \\a\\\\'
psql=> :example
Output format is unaligned.
?column?|?column?
1|string literal
(1 row)
Output format is aligned.
psql=> \a\\ SELECT 1, 'string literal'; \a\\
Output format is unaligned.
?column?|?column?
1|string literal
(1 row)
Output format is aligned.
psql=> \set example '\\a\\\\ SELECT 1, ''string literal''; \\a\\\\'
psql=> :example
Output format is unaligned.
?column?|?column?
1|string literal
(1 row)
Output format is aligned.