J'ai importé 100 tables dans Postgres depuis le serveur MSSql 2008 via l'outil qui a créé toutes les tables avec leurs colonnes en majuscule. Maintenant, si je veux faire une vue des données à partir de la table, par exemple - STD_TYPE_CODES as-
select * from STD_TYPE_CODES
Je reçois une erreur-
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
Je sais que je peux mettre les guillemets autour du nom de la table
select * from "STD_TYPE_CODES"
Mais comme j'ai travaillé avec MSSql Server, il n'y a pas ce genre de problème. Y a-t-il un moyen de s'en débarrasser? Veuillez aider.
Dans PostgreSQL, les noms non cités ne sont pas sensibles à la casse. Ainsi SELECT * FROM hello
et SELECT * FROM HELLO
sont équivalents.
Cependant, les noms cités sont sensibles à la casse. SELECT * FROM "hello"
est pas équivalent à SELECT * FROM "HELLO"
.
Pour faire un "pont" entre les noms entre guillemets et les noms sans guillemets, les noms sans guillemets sont implicitement en minuscules, donc hello
, HELLO
et HeLLo
sont équivalents à "hello"
, mais pas à "HELLO"
ou "HeLLo"
(OOPS!).
Ainsi, lors de la création d'entités (tables, vues, procédures, etc.) dans PostgreSQL, vous devez les spécifier sans guillemets ou entre guillemets mais en minuscules.
Pour convertir des tables/vues/etc existantes, vous pouvez utiliser quelque chose comme ALTER TABLE "FOO" RENAME TO "foo"
.
Ou essayez de modifier le vidage de MSSQL pour le rendre "compatible PostgreSQL" (afin qu'il contienne foo
s ou "foo"
s mais pas "FOO"
s).
sed -r 's/"[^"]+"/\L\0/g' dumpfile
- cependant soyez averti que cette commande peut également modifier le texte dans les littéraux de chaîne.)La solution ci-dessus fonctionne également pour pg_dump sur Debian Stretch. Finalement compris qu'il est similaire à la façon dont vous le faites dans la ligne de commande de psql:
pg_dump -d myDatabaseName -t \"myTableName\" > myDumped.sql
Cela ne fonctionnera pas avec des guillemets simples après les barres obliques inverses, comme cela ne fonctionnera pas à l'invite psql>.