PostgreSQL: Sobre las primary keys y foreign keys.

Rodrigo Fuentealba darkprox en gmail.com
Lun Mayo 7 18:12:46 CLT 2007


El 7/05/07, Alvaro Herrera <alvherre en alvh.no-ip.org> escribió:
> Rodrigo Fuentealba escribió:
>
> > >En ADOdb (http://adodb.sourceforge.net), cuando no especifico los
> > >datos que corresponden con la clave primaria (por ejemplo, el código
> > >de la misma),
> >
> > Cuando no especifico los datos que corresponden con la clave primaria
> > y ésta es serial, entonces se produce un error... el cual lógicamente
> > no debiera producirse... si es serial, ya tiene un valor per-default!
>
> Probablemente tienes datos en la tabla cuyos valores son superiores al
> valor que tiene la secuencia.
>
> Usa setval() para corregir la secuencia,

Lo he probado con tablas vacías, con un registro, con 10 registros...
y continúa; el problema no está en la tabla, ni en la secuencia.
Preguntaba esto porque hay un problema en la clase PHP para manejar
estas cositas, pero para depurarlo necesitaba saber algo más de
PostgreSQL.

De hecho, la misma query que "supuestamente" debiera generarse tanto
con ActiveRecord como con una consulta preparada, falla solo en
ActiveRecord.

> tomando el valor de un select max() de la tabla.  Para evitar el
> problema en el futuro, asegurate que todas las inserciones se hacen
> usando la secuencia, es decir, que no especifiques valores manualmente
> para esa columna.

Yup. Lo sé. (Llevo poco más de un año machacándome con PostgreSQL,
PostGIS y otras cositas, e inclusive lo utilizo para enseñar a modelar
datos.).

-- 
Rodrigo Fuentealba Cartes
Desarrollador de Sistemas Web
Registered User 387639 - http://counter.li.org



Más información sobre la lista de distribución Linux