2010-09-30 25 views
14

Nella mia app LiveCode Server mi viene restituito un dberr all'inserimento ma nessun codice di errore esplicito.Cosa significano i parametri di conferma INSERT PostgreSQL?

Sono andato su un terminale e ho fatto l'inserimento a mano come utente Postgres.

%My_Dbase=# INSERT INTO new-table (first_name, last_name, anonymous) VALUES ('batman', 'Moonboy', TRUE); 

Il processo di psql rendimenti:

INSERT 0 1 

Che cosa significa questa linea? Oltre alla tabella primaria ho anche una sequenza per incrementare l'ID della chiave primaria (int) della tabella principale.

Se controllo i dati, i dati sono inseriti, la chiave primaria è incrementata di uno e tutto sembra a posto, non sono sicuro del motivo per cui la mia app restituisce un errore (potrebbe esserci un bug nell'app o nel mio codice).

Ma se sapessi cosa INSERT 0 1 significava, che mi avrebbe aiutato assicurarmi che:

  1. Sì, l'inserimento è stato fatto senza errori, o
  2. No, il 0 1 indica un errore di qualche tipo.

Se qualcuno ha un collegamento al documento PostgreSQL che indica quali sono i parametri di risposta del server, lo studierò ... Ho cercato ovunque.

risposta

2

Abbastanza fastidiosamente, non riesco a trovare alcuna documentazione reale su questo.

Tuttavia guardando http://www.postgresql.org/docs/current/interactive/rules-status.html e PQcmdStatus all'interno di http://www.postgresql.org/docs/current/interactive/libpq-exec.html, sembra che quello che stai vedendo è uno stato di comando.

Il formato che deduco dalla documentazione è COMMANDSTATUS_CODEROWS_AFFECTED.

Quindi quello che stai vedendo è che hai fatto un inserto, lo status_code era zero, e una riga era interessata.

Quindi, in altre parole, il comando è stato completato con successo!

+0

eccezionale, grazie, ho deciso in seguito. Voglio dire se vedo i dati in admin phpPGsql ... ho dovuto presumere che funzionasse. @matthew: il suggerimento su come restituire la chiave id primaria è molto utile ... Ne ho uno, anche se è denominato "donation_id" e viene incrementato automaticamente tramite una sequenza associata. – katir

22

Estratto dal the relevant page in the manual:

uscite

In caso di successo, un comando INSERT restituisce un tag di comando della forma

INSERT conteggio OID

Il conteggio è il numero di righe inserite. Se il conteggio è esattamente uno, e la tabella di destinazione ha OID, quindi oid è l'OID assegnato alla riga inserita. Altrimenti oid è zero.

+3

Come addendum a questa risposta, supponendo di avere un campo chiamato "id" nella tabella che viene assegnato automaticamente tramite sequenza, se si esegue l'inserimento nel modulo "INSERT INTO new-table (first_name, last_name, anonymous) VALUES ('batman', 'Moonboy', TRUE) RETURNNING id ", il messaggio" INSERT 0 1 "verrebbe sostituito dal nuovo valore di id nel record appena inserito. –

Problemi correlati