我已经通过工具从MSSql Server 2008从Postgres中导入了100个表,该工具创建了所有表以及它们的大写字母列。现在,如果我想从表中获取数据视图,例如-STD_TYPE_CODES as-
select * from STD_TYPE_CODES
我收到以下错误-
ERROR: relation "std_type_codes" does not exist
LINE 1: select * from STD_TYPE_CODES
^
********** Error **********
ERROR: relation "std_type_codes" does not exist
SQL state: 42P01
Character: 15
我知道我可以在表名周围加上引号-
select * from "STD_TYPE_CODES"
但是,正如我使用MSSql Server一样,没有这种问题。那么有什么办法可以摆脱这种情况呢?请帮忙。
在PostgreSQL中,未加引号的名称不区分大小写。因此SELECT * FROM hello
和SELECT * FROM HELLO
是等效的。
但是,带引号的名称区分大小写。SELECT * FROM "hello"
是不是等同于SELECT * FROM "HELLO"
。
为了使报价名称和不带引号的名称之间的“桥梁”,不带引号的名称隐含小写,因此hello
,HELLO
并HeLLo
相当于"hello"
,而不是"HELLO"
或"HeLLo"
(OOPS!)。
因此,在PostgreSQL中创建实体(表,视图,过程等)时,应指定它们不带引号或带引号但小写的形式。
要转换现有的表/视图/等,您可以使用ALTER TABLE "FOO" RENAME TO "foo"
。
或者,尝试修改MSSQL的转储以使其“与PostgreSQL兼容”(以便它包含foo
s或"foo"
s,但不包含"FOO"
s)。
sed -r 's/"[^"]+"/\L\0/g' dumpfile
-但是请注意,此命令还可能会修改字符串文字中的文本。)本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句