W PostgreSQL w nazwach niecytowanych nie jest rozróżniana wielkość liter. Zatem SELECT * FROM hello
i SELECT * FROM HELLO
są równoważne.
Jednak w nazwach cytowanych wielkość liter jest rozróżniana. SELECT * FROM "hello"
jest nie odpowiednik SELECT * FROM "HELLO"
.
Aby stworzyć "most" między nazwami w cudzysłowie i nazwami bez cudzysłowów, nazwy bez cudzysłowów są domyślnie pisane małymi literami, stąd hello
, HELLO
i HeLLo
są równoważne z "hello"
, ale nie do "HELLO"
lub "HeLLo"
(UPS!).
Dlatego podczas tworzenia encje (tabele, widoki, procedury itp.) w PostgreSQL, powinieneś określić je jako niecytowane lub w cudzysłowie, ale z małymi literami.
Aby przekonwertować istniejące tabele/widoki/itp., możesz użyć czegoś takiego jak ALTER TABLE "FOO" RENAME TO "foo"
.
Lub spróbuj zmodyfikować zrzut z MSSQL, aby był „zgodny z PostgreSQL” (tak, aby zawierał foo
s lub "foo"
s, ale nie "FOO"
s).
- Albo przez jawną edycję pliku zrzutu. (Jeśli używasz Linuksa, możesz wykonać
sed -r 's/"[^"]+"/\L\0/g' dumpfile
— należy jednak pamiętać, że to polecenie może również modyfikować tekst w literałach łańcuchowych.) - Lub określając niektóre opcje podczas pobierania zrzutu z MSSQL. (Nie jestem pewien, czy są takie opcje w MSSQL, nigdy ich nie używałem, ale prawdopodobnie takie opcje powinny istnieć.)