In PostgreSQL unquoted names are case-insensitive. Thus SELECT * FROM hello
and SELECT * FROM HELLO
are equivalent.
However, quoted names are case-sensitive. SELECT * FROM "hello"
is not equivalent to SELECT * FROM "HELLO"
.
To make a "bridge" between quoted names and unquoted names, unquoted names are implicitly lowercased, thus hello
, HELLO
and HeLLo
are equivalent to "hello"
, but not to "HELLO"
or "HeLLo"
(OOPS!).
Thus, when creating entities (tables, views, procedures, etc) in PostgreSQL, you should specify them either unquoted, or quoted-but-lowercased.
To convert existing tables/views/etc you can use something like ALTER TABLE "FOO" RENAME TO "foo"
.
Or, try to modify dump from MSSQL to make it "PostgreSQL-compatible" (so that it will contain foo
s or "foo"
s but not "FOO"
s).
- Either by explicitly editing dump file. (If you're using Linux, you can do
sed -r 's/"[^"]+"/L/g' dumpfile
— however be warned that this command may also modify text in string literals.)
- Or by specifying some options when getting dump from MSSQL. (I'm not sure if there are such options in MSSQL, never used it, but probably such options should exist.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…