sql >> Databáze >  >> RDS >> PostgreSQL

Psycopg2 nemá rád názvy tabulek, které začínají malým písmenem

Chcete-li přidat k další odpovědi, chování Postresql ohledně rozlišování malých a velkých písmen v identifikátorech (názvy tabulek a názvy sloupců) je:

  • Pokud název není v uvozovkách, převede se na malá písmena . V opačném případě zůstane nedotčen.
  • Poté rozlišování velkých a malých písmen je pokus.

To platí nejen pro dotazy, ale také pro manipulaci se schématy; konkrétně:vytvoření tabulky.

Zlaté pravidlo je konzistence:

Pokud chcete psát přenosné aplikace, doporučujeme vám vždy citovat konkrétní jméno nebo jej nikdy necitovat

Odeslaný problém vznikl pravděpodobně proto, že názvy tabulek a sloupců byly v době vytvoření citovány (nebyly tedy převedeny na malá písmena). Nyní tedy musí být uvozovány (a rozlišovat malá a velká písmena) ve všech dotazech.

Normálně vše funguje podle očekávání.

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. Jak dezinfikovat raw SQL v Rails 4

  2. Seřaďte hodnoty NULL na konec tabulky

  3. Jak najít a nahradit text v tabulce mysql

  4. odstranit sloupec neexistuje