2010-09-30 9 views
14

En mi aplicación LiveCode Server recibo un dberr devuelto en la inserción pero no hay un código de error explícito.¿Qué significan los parámetros de confirmación PostgreSQL INSERT?

Fui a un terminal e hice la inserción a mano como usuario Postgres.

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

El proceso de psql devuelve:

INSERT 0 1 

¿Qué significa esta línea? Además de la tabla primaria, también tengo una secuencia para incrementar la ID de la clave principal (int) de la tabla principal.

Si reviso los datos, los datos se insertan, la clave principal se incrementa en uno y todo parece estar bien, no estoy seguro de por qué mi aplicación está devolviendo un error (podría ser un error en la aplicación o mi código)

Pero si sabía lo que INSERT 0 1 significaba, que me ayudaría a asegurarme de que:

  1. Sí, la inserción se realiza sin errores, o
  2. No, el 0 1 indica un error de algún tipo.

Si alguien tiene un enlace al documento de PostgreSQL que dice cuáles son los parámetros de respuesta del servidor, lo estudiaré ... He buscado en todas partes.

Respuesta

2

Bastante molesto, no puedo encontrar ninguna documentación real sobre esto.

Sin embargo, al mirar http://www.postgresql.org/docs/current/interactive/rules-status.html y PQcmdStatus dentro de http://www.postgresql.org/docs/current/interactive/libpq-exec.html, parece que lo que está viendo es un estado de comando.

El formato que estoy deduciendo de la documentación es COMMANDSTATUS_CODEROWS_AFFECTED.

Lo que está viendo es que ha hecho una inserción, el código de estado era cero y una fila se vio afectada.

¡En otras palabras, su orden se está completando con éxito!

+0

pendientes, gracias, posteriormente lo determiné. Quiero decir, si veo los datos en phpPGsql admin ... tuve que asumir que funcionaba. @matthew: ese consejo al devolver la clave de identificación primaria es muy útil ... Tengo uno, aunque se llama "donation_id" y se incrementa automáticamente a través de una secuencia asociada. – katir

22

Extracto de the relevant page in the manual:

salidas

Al finalizar con éxito, un comando INSERT devuelve una etiqueta de comando de la forma

INSERT OID recuento

El recuento es el número de filas insertadas Si count es exactamente uno, y la tabla de destino tiene OID, entonces oid es el OID asignado a la fila insertada. De lo contrario, oid es cero.

+3

Como una adición a esta respuesta, suponiendo que tiene un campo llamado "id" en su tabla que se asigna automáticamente por secuencia, si ejecuta su inserción en el formulario "INSERT INTO new-table (first_name, last_name, anonymous) VALUES ('batman', 'Moonboy', TRUE) RETURNING id ", el mensaje" INSERT 0 1 "se reemplazará por el nuevo valor de id en el registro recién insertado. –

Cuestiones relacionadas