Saltar a contenido

Migración OIDS

Si ha migrado de PostgresQL versión 10 o menor a las versiones 12 o mayor, ya no existe el uso y facilidad de utilizar los oids como medio de obtener el último registro ingresado en una tabla.

Para migrar el código existente se debe de utilizar alguna de las siguientes alternativas.

Todos estos ejemplos están basados en el uso de la librería Pg_VB.pm, pero se pueden utilizar de forma similar directamente sobre las librerías dbh de DBI.

execute

Indique en el query de un insert que desea que se le regrese el campo de la llave única serial que ha declarado en su tabla. Como ejemplo en este caso: id

$id = $rs->execute("insert into tabla (name) values ('valor') returning id",'id');

Esto es debe de indicar en su query que quiere que se le regrese el valor insertado de la llave primaria id y para que la librería sepa que valor regresar deberá regresar.

Usando librerías estándar DBD

$sth->execute("insert ... returning id");
$nrs = $sth->fetchrow_hashref();
print "mi nuevo id = $$nrs{'id'}";

insert

Si usa el método insert para insertar datos de un hash en la tabla, deberá de incluir en los datos del hash el nombre del campo serial de la tabla en el campo RETURN_LAST_ID

$data{'RETURN_LAST_ID'} = 'id';
$oid = $rs->insert('rusers',\%data,1);

No migrar

Si no migra explícitamente su código, considere que la librería Pg_VB, intenta regresar de todos modos el valor de la última llave insertada, intentando localizar cual es la llave primaria de la tabla.

Uso de llave no migrada

Tenga cuidado de migrar el código posterior a la recepción del número secuencial generado, ya que en las codificaciones previas se seguía la siguiente lógica

$oid = $rs->execute($qry);
$rs->excute("select id from tabla where oid=$oid")

Esto ya es un error debido que el dato oid, no existe o si existe de todos modos ya no corresponde al valor que regresó la librería, deberá de todos modos migrar el código al

$oid = $rs->execute($qry);    
$rs->execute("select id from tabla where id=$oid")