Postgres区分大小写

灯芯

我已经通过工具从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 helloSELECT * FROM HELLO是等效的。

但是,带引号的名称区分大小写。SELECT * FROM "hello"不是等同于SELECT * FROM "HELLO"

为了使报价名称和不带引号的名称之间的“桥梁”,不带引号的名称隐含小写,因此helloHELLOHeLLo相当于"hello",而不是"HELLO""HeLLo"(OOPS!)。

因此,在PostgreSQL中创建实体(表,视图,过程等)时,应指定它们不带引号或带引号但小写的形式。


要转换现有的表/视图/等,您可以使用ALTER TABLE "FOO" RENAME TO "foo"

或者,尝试修改MSSQL的转储以使其“与PostgreSQL兼容”(以便它包含foos或"foo"s,但不包含"FOO"s)。

  • 通过显式编辑转储文件。(如果您使用的是Linux,则可以这样做sed -r 's/"[^"]+"/\L\0/g' dumpfile-但是请注意,此命令还可能会修改字符串文字中的文本。)
  • 或者从MSSQL获取转储时指定一些选项。(我不确定MSSQL中是否有这样的选项,从未使用过,但是可能应该存在这样的选项。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章