Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sensibilité à la casse Postgres

Dans PostgreSQL, les noms sans guillemets ne sont pas sensibles à la casse. Ainsi SELECT * FROM hello et SELECT * FROM HELLO sont équivalents.

Cependant, les noms entre guillemets sont sensibles à la casse. SELECT * FROM "hello" n'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" (OUPS !).

Ainsi, lors de la création entités (tables, vues, procédures, etc.) dans PostgreSQL, vous devez les spécifier soit sans guillemets, soit 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 avec PostgreSQL" (afin qu'il contienne foo s ou "foo" s mais pas "FOO" s).

  • Soit en éditant explicitement le fichier de vidage. (Si vous utilisez Linux, vous pouvez faire 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.)
  • Ou en spécifiant certaines options lors de l'obtention d'un vidage à partir de MSSQL. (Je ne sais pas s'il existe de telles options dans MSSQL, je ne l'ai jamais utilisé, mais de telles options devraient probablement exister.)