Postgres: la relazione non esiste errore


14

Ho usato pg_restore per caricare il mio db postgres con un file di dump. Mi sono collegato al mio db con il mio utente:

sudo -u arajguru psql dump

select current_user;
 current_user 
--------------
 arajguru

Ora sono stato in grado di vedere tutte le tabelle appena create:

dump=> \dt
               List of relations
 Schema |       Name        | Type  |  Owner   
--------+-------------------+-------+----------
 public | Approvals         | table | arajguru
 public | Approvers         | table | arajguru
 public | Conditions        | table | arajguru
 public | Entities          | table | arajguru
 public | EntityDefinitions | table | arajguru
 public | Projects          | table | arajguru
 public | Rules             | table | arajguru
 public | run_history       | table | arajguru
(8 rows)

Ma quando provo a lanciare una query select *, mi dà questo errore:

dump=> select * from Approvals;
ERROR:  relation "approvals" does not exist
LINE 1: select * from Approvals;

Quale può essere la ragione di questo errore? Per favore aiuto.

Risposte:


24

Hai creato le tue tabelle con virgolette doppie e ora i nomi fanno distinzione tra maiuscole e minuscole.

Come documentato nel manuale "Approvals" e Approvalssono due nomi diversi.

Ora che hai creato i nomi delle tabelle in modo sensibile al maiuscolo / minuscolo, devi sempre usare quelle temute doppie virgolette.

select * 
from "Approvals";

Come consiglio generale: non usare mai virgolette doppie in SQL.


1
Grazie! Lavora adesso. Come sapevi che le tabelle sono state create con virgolette doppie?
Ayushi Rajguru,

1
@AyushiRajguru: perché la "Lista delle tabelle" li mostra in maiuscolo / minuscolo. L'unico modo per ottenerlo è utilizzare le virgolette doppie (come documentato nel manuale )
a_horse_with_no_name

ahh, ho avuto lo stesso con i registri contro i "registri", grazie <3
csomakk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.