Se la colonna nella tabella di Postgres ha il nome year, come dovrebbe essere la INSERTquery per impostare il valore per quella colonna?
Ad esempio: INSERT INTO table (id, name, year) VALUES ( ... );dà un errore vicino alla parola dell'anno .
Se la colonna nella tabella di Postgres ha il nome year, come dovrebbe essere la INSERTquery per impostare il valore per quella colonna?
Ad esempio: INSERT INTO table (id, name, year) VALUES ( ... );dà un errore vicino alla parola dell'anno .
Risposte:
Basta racchiuderlo yeartra virgolette doppie per impedire che venga interpretato come una parola chiave :
INSERT INTO table (id, name, "year") VALUES ( ... );
Dalla documentazione :
Esiste un secondo tipo di identificatore: l'identificatore delimitato o l'identificatore citato. È formato racchiudendo una sequenza arbitraria di caratteri tra virgolette ("). Un identificatore delimitato è sempre un identificatore, mai una parola chiave. Quindi" select "può essere utilizzato per fare riferimento a una colonna o una tabella denominata" select ", mentre una selezione non quotata verrebbe presa come parola chiave e provocherebbe quindi un errore di analisi se usata laddove è previsto un nome di tabella o colonna.
update "user" set "password" = 'value...';funziona perfettamente bene ...
Se non fornisci le virgolette in nessun campo / colonna, per impostazione predefinita sarà minuscolo da Postgres. E Postgres salterà il controllo della parola chiave quando si tratta del nome della colonna.
Nel tuo caso, non credo sia obbligatorio aggiungere citazioni quando si tratta di columns. Ma se si utilizza keywords(registrato da Postgres) come nome di Table, Schema, Functiono Triggerecc, è necessario disporre di utilizzare le virgolette, oppure è possibile specificare il nome schema con dot concatenazione.
Supponiamo che ordine sia la parola chiave registrata da Postgres. E in alcuni scenari, è necessario utilizzare questa parola chiave come nome di tabella.
In quel momento, Postgres ti permetterà di creare una tabella con keywords. Questa è la bellezza di Postgres.
Per accedere alla tabella degli ordini, è necessario utilizzare un preventivo doppio oppure è possibile inserire il nome dello schema prima del nome della tabella.
PER ESEMPIO
1.
select * from schema_name.order;
2.
select * from "order";
Allo stesso modo, puoi usare questo tipo di combinazione. Spero che questo ti possa aiutare.
MyTable,myTableEmytablesono lo stesso. Con le virgolette questa piegatura non è fatta. Quindi"MyTable"non è più lo stesso dimytable.