Postgresql 如何将psql元命令放入psql变量中,以便以后执行?
我通过将要运行的SQL放入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'; ^ 到目前为止,我
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'
等的类似C字符串的反斜杠转义处理。这很重要,因为它意味着\n
扩展为\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.