如何在动态 PL/pgsql ALTER TABLE 语句中表示双引号

How to represent double quotes in dynamic PL/pgsql ALTER TABLE statement

我发现自己处在一个我确信很多人以前也有过的位置。我使用生成器生成了我的 PostgreSQL 模式,现在我在生产中(!),我意识到我真的应该尝试从生成器添加的 table 和列名中删除双引号,即

CREATE TABLE "myschema"."mytable" (....

应该是

CREATE TABLE myschema.mytable (....

我正在编写一个 PL/pgsql 函数来循环遍历 information_schema.tables 和 information_schema.columns,然后执行 ALTER TABLE 语句以删除双引号。

我无法从文档和搜索中掌握的是如何发布该声明。

我知道这是我需要的 EXECUTE,但有人可以帮助我使用语法将“mytable”重命名为 mytable。我对 $$ 和 format() 以及 quote_ident() 迷路了,我认为我把如何指示我原来的 table 名称将有双引号的方法过于复杂了。

您的示例中的双引号 不是名称的 部分,只是修饰符以保留标识符的原始拼写。参见:

  • Are PostgreSQL column names case-sensitive?

在使用 小写合法标识符 时(如您的示例所示),这些双引号完全是可选的。添加或离开它们。

如果您不明智地创建了具有非法名称或大小写混合的对象,那么这些双引号始终是必需的。解决方法是坚持使用合法的小写标识符。

首先阅读 the manual about identifiers