【问题标题】:Error when running postgresql COPY Command运行 postgresql COPY 命令时出错
【发布时间】:2021-08-12 21:08:49
【问题描述】:

希望在 postgresSQL 中运行 COPY 命令时能够在模式名称中添加像“-”这样的字符。有什么办法可以解决这个问题?谢谢!

`psql -d postgres -c "\COPY (SELECT * FROM test-schema.tableName) TO data.csv DELIMITER ',' CSV"

 ERROR:  syntax error at or near "-"`enter code here`
 LINE 1: COPY  ( SELECT * FROM test-schema.tableName ) TO STDOUT DELIMITER ',...`

【问题讨论】:

    标签: postgresql copy command psql


    【解决方案1】:

    是的,尽管我倾向于不鼓励这样做。

    Identifiers:

    SQL 标识符和关键字必须以字母(a-z,还包括带有变音符号和非拉丁字母的字母)或下划线 (_) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。请注意,根据 SQL 标准的字母,标识符中不允许使用美元符号,因此使用它们可能会降低应用程序的可移植性。 SQL 标准不会定义包含数字或以下划线开头或结尾的关键字,因此这种形式的标识符可以避免与标准的未来扩展发生冲突。

    还有第二种标识符:分隔标识符或引用标识符。它由双引号 (") 中的任意字符序列组成。

    所以:

    create schema "test-schema";
    CREATE SCHEMA
    
    \dn "test-schema" 
        List of schemas
        Name     |  Owner   
    -------------+----------
     test-schema | postgres
    
    create table "test-schema"."test-table"(id int);
    
    select * from test-schema."test-table";
    ERROR:  syntax error at or near "-"
    LINE 1: select * from test-schema."test-table";
    
    select * from "test-schema"."test-table";
     id 
    ----
    (0 rows)
    
    

    如您所见,如果您使用双引号来绕过标识符命名规则,那么您必须始终引用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2015-10-30
      • 2011-08-15
      • 2014-08-01
      相关资源
      最近更新 更多