sql >> Databasteknik >  >> RDS >> PostgreSQL

Psycopg2 gillar inte tabellnamn som börjar med en liten bokstav

För att lägga till det andra svaret, beteendet hos Postresql om skiftlägeskänslighet för identifierare (tabellnamn och kolumnnamn) är:

  • Om namnet inte citeras konverteras det till gemener . Annars lämnas den orörd.
  • Efteråt en skiftlägeskänslig matchning är försökt.

Detta gäller inte bara för frågor, utan också för schemamanipulation; i synnerhet:skapande av tabeller.

Den gyllene regeln är konsekvens:

Om du vill skriva bärbara applikationer rekommenderas du att alltid citera ett visst namn eller aldrig citera det

Det postade problemet uppstod troligen eftersom tabellernas och kolumnnamnen citerades när de skapades (därav de konverterades inte till gemener). Så nu måste de citeras (och skiftlägeskänsliga) i alla frågor.

Normalt fungerar allt som förväntat.

db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx;    -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer);  -- will be left untouched
CREATE TABLE
db=# select * from xxxx;                -- bad
ERROR:  relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx;                -- bad
ERROR:  relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx";               -- ok
id
----
(0 rows)

db=# \dt *xx*
List of relations
Schema | Name | Type  |  Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx  | table | postgres


  1. Använda MySQL relationsdatabaser på Fedora 20

  2. Android:öppnar och stänger SQLite-databas

  3. MySQL - tvinga att inte använda cache för att testa frågans hastighet

  4. Tillåten minnesstorlek på 8589934592 byte är slut