Postgresql-Uso de subconsultas con expresiones alter sequence


Mi pregunta es algo simple.

¿Es posible usar subconsultas dentro de expresiones alter en PostgreSQL?

Quiero alterar un valor de secuencia basado en un valor de columna de clave primaria.

Intenté usar la siguiente expresión, pero no se ejecutó.

Alter sequence public.sequenceX restart con (seleccione max (table_id)+1 de la tabla)

Gracias de antemano

Author: Tom H, 2010-01-07

2 answers

No creo que puedas hacerlo así, pero deberías poder usar la dirección de la función setval que es lo que hace el alter.

select setval('sequenceX', (select max(table_id)+1 from table), false)

El false hará que devuelva el siguiente número de secuencia exactamente como se da.

 62
Author: Arthur Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-07 18:56:26

Además, si tiene nombres de objetos de mayúsculas y minúsculas mezclados y está obteniendo un error como este:

ERROR: relation "public.mytable_id_seq" does not exist

... la siguiente versión usando regclass debería ser útil:

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
 4
Author: Duncan Smart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-01 16:41:19