sql >> Database teknologi >  >> RDS >> Sqlserver

Postgres versalfølsomhed

I PostgreSQL er navne uden anførselstegn mellem store og små bogstaver. Derfor SELECT * FROM hello og SELECT * FROM HELLO er ækvivalente.

Anførte navne skelner dog mellem store og små bogstaver. SELECT * FROM "hello" er ikke svarende til SELECT * FROM "HELLO" .

For at lave en "bro" mellem navne uden anførselstegn og navne uden anførselstegn, er navne uden anførselstegn implicit med små bogstaver, således hello , HELLO og HeLLo svarer til "hello" , men ikke til "HELLO" eller "HeLLo" (UPS!).

Således når du opretter enheder (tabeller, visninger, procedurer osv.) i PostgreSQL, bør du angive dem enten uden citat eller citeret-men med små bogstaver.

For at konvertere eksisterende tabeller/visninger/osv kan du bruge noget som ALTER TABLE "FOO" RENAME TO "foo" .

Eller prøv at ændre dump fra MSSQL for at gøre det "PostgreSQL-kompatibelt" (så det vil indeholde foo s eller "foo" s, men ikke "FOO" s).

  • Enten ved eksplicit at redigere dumpfil. (Hvis du bruger Linux, kan du lave sed -r 's/"[^"]+"/\L\0/g' dumpfile — vær dog advaret om, at denne kommando også kan ændre tekst i strenge bogstaver.)
  • Eller ved at angive nogle muligheder, når du henter dump fra MSSQL. (Jeg er ikke sikker på, om der er sådanne muligheder i MSSQL, har aldrig brugt det, men sandsynligvis burde sådanne muligheder eksistere.)



  1. Indsæt data via en funktion med tabelværdi i SQL Server

  2. Syntaksfejl i slutningen af ​​input i PostgreSQL

  3. jsonb vs jsonb[] for flere adresser til en kunde

  4. Krydstabel-begrænsninger i PostgreSQL