【问题标题】: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)
如您所见,如果您使用双引号来绕过标识符命名规则,那么您必须始终引用它。