如何在PostgreSQL的psql命令行工具中注释特殊命令?

59

psql中,以\开头的特殊命令的注释字符是什么?

以下似乎有效:

SELECT * FROM my_table     -- this is my comment

但这不起作用:

\dt jvcurve_thin.jvcurve_results    --  my comment #2

\dt:忽略额外的参数“--”


12
psql 不支持在其斜线命令后添加尾随行注释,只能将注释放在前一行。 - Craig Ringer
1
以上回复应该作为答案发布,而不是评论。这将允许投票和后续评论。特别是,我建议参考cjerdonek的答案 - David J.
5个回答

77
根据PostgreSQL文档,有内联和块状两种注释方式。 内联样式:
SELECT 23 AS test  -- this is just a test

块级样式:block

/* The following is a very
 * non-trivial SQL code */
SELECT 42 AS result

5
他询问如何在psql交互式控制台脚本中进行注释(即包括注释其反斜杠元命令的方式,这是关键),而不是如何注释常规的Postgres SQL。 - Petr Pivonka
@PetrPivonka 这个问题的标题是“Postgres / PostgreSQL / PSQL中的注释字符/字符”,这是搜索引擎主要索引它的方式。 - Tregoreg

22
在SQL中,注释以--开头。

4
大多数数据库也允许使用C风格的注释,但我不确定是否有任何SQL标准规定了它们:/* comment */ - mu is too short
历史背景:此答案在当时非常有用;OP感谢了作者。之后,OP提出了一个关于如何在psql中添加注释(元命令)的跟进问题(例如,\l用于列出数据库)。在这个时间点上,只有cjerdonek的答案回答了这些跟进问题。 - David J.
1
奇怪的是,后续问题甚至不是原作者提出的。其他人只是编辑了问题,改成了另一个问题。 - Ben Millwood

8

看起来 psql 不支持在其特定于 psql 的“斜线命令”中使用传统的行末注释 --。-- 在PostgreSQL psql文档中,这些被称为元命令

然而,如果您可以接受在执行时显示行末注释,则使用\echo似乎是一个有效的解决方法。例如:

\dt jvcurve_thin.jvcurve_results   \echo my comment #2

“双斜杠”分隔符元命令似乎是另一种可能性(并且没有回显的副作用)。 用它开启一个新命令,然后立即开始一个--注释:

\dt jvcurve_thin.jvcurve_results   \\ -- my comment #2

最后,切换到shell并添加一个shell注释似乎是另一种可能性:
\dt jvcurve_thin.jvcurve_results   \! # my comment #2

你可能不应该使用两个反斜杠 \,因为它们用于分隔 psql 命令,例如 \d table1 \\ \d table2,并且当所谓的注释包含 psql 命令时会表现出行为。请参见此处选项 -c 的说明(http://www.postgresql.org/docs/9.1/static/app-psql.html)。 - valid
1
谢谢,@valid。那么,在双反斜杠后面加上--,就像\\ --我的评论一样,怎么样? - cjerdonek
2
哦,是的。那似乎还可以。它仍然引入了一些“不同”的行为。在 psql 交互式控制台中键入双破折号时,该注释命令及其直接后续命令将与下一个(打破注释)非注释命令一起被收集并存储到历史记录中 - 类似于多行注释的行为。双反斜杠与双破折号结合使用不会以相同的方式工作,即该注释不会与以下命令编译。尽管我认为这是所需的行为,但我并不觉得特别直观。所以要注意;) - valid
有趣。我想在双斜杠后跟双破折号注释的情况下,可以认为将行尾注释仅与该行相关联是有意义的(因为它是行尾注释)。 - cjerdonek

6

来自官方文档:PostgreSQL注释

A comment is a sequence of characters beginning with double dashes and extending to the end of the line, e.g.:

-- This is a standard SQL comment

Alternatively, C-style block comments can be used:

/* multiline comment  * with nesting: /* nested block comment */  */

where the comment begins with /* and extends to the matching occurrence of */. These block comments nest, as specified in the SQL standard but unlike C, so that one can comment out larger blocks of code that might contain existing block comments.

A comment is removed from the input stream before further syntax analysis and is effectively replaced by whitespace.

自黑暗时代(版本7.0)以来,它一直以相同的方式得到支持。


-3

在PostgreSQL pgAdmin4中,最好选择并按Ctrl+Shift+/来注释多行代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接