PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Psycopg2 nie lubi nazw tabel zaczynających się od małej litery

Aby dodać do drugiej odpowiedzi, zachowanie Postresql dotyczące rozróżniania wielkości liter w identyfikatorach (nazwy tabel i nazwy kolumn) to:

  • Jeśli nazwa nie jest cytowana, jest konwertowana na małe litery . W przeciwnym razie pozostaje nietknięty.
  • Następnie dopasowanie uwzględniające wielkość liter jest próba.

Dotyczy to nie tylko zapytań, ale także manipulacji schematem; w szczególności:tworzenie tabel.

Złotą zasadą jest spójność:

Jeśli chcesz pisać aplikacje przenośne, radzimy zawsze cytować konkretną nazwę lub nigdy jej nie cytować

Zamieszczony problem pojawił się prawdopodobnie dlatego, że nazwy tabel i kolumn były cytowane w czasie tworzenia (stąd nie zostały zamienione na małe litery). Dlatego teraz muszą być cytowane (z uwzględnieniem wielkości liter) we wszystkich zapytaniach.

Zwykle wszystko działa zgodnie z oczekiwaniami.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć ścieżkę pg_config

  2. Używanie wyrażenia regularnego w WHERE w Postgres

  3. Psycopg2 nie lubi nazw tabel zaczynających się od małej litery

  4. PostgreSQL - zapytanie ze skryptu bash jako użytkownik bazy danych 'postgres'

  5. Tworzenie sekwencji PostgreSQL do pola (które nie jest identyfikatorem rekordu)