Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

417
Vistas
Obtener todas las secuencias con valores actuales

Tengo la siguiente consulta que obtiene todas las secuencias y sus esquemas:

 SELECT sequence_schema as schema, sequence_name as sequence FROM information_schema.sequences WHERE sequence_schema NOT IN ('topology', 'tiger') ORDER BY 1, 2

Me gustaría obtener el valor actual de cada nombre de secuencia con algo como select last_value from [sequence]; . He intentado lo siguiente (y un par de variaciones), pero no funciona porque la sintaxis no es correcta:

 DO $$ BEGIN EXECUTE sequence_schema as schema, sequence_name as sequence, last_value FROM information_schema.sequences LEFT JOIN ( EXECUTE 'SELECT last_value FROM ' || schema || '.' || sequence ) tmp ORDER BY 1, 2; END $$;

He encontrado algunas soluciones que crean funciones para ejecutar texto o armar una consulta dentro de una función y devolver el resultado, pero preferiría tener una sola consulta que pueda ejecutar y modificar como quiera.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En Postgres 12, puede usar pg_sequences :

 select schemaname as schema, sequencename as sequence, last_value from pg_sequences
over 4 years ago · Santiago Trujillo Denunciar

0

Puede confiar en la función pg_sequence_last_value

 SELECT nspname as schema, relname AS sequence_name, coalesce(pg_sequence_last_value(s.oid), 0) AS seq_last_value FROM pg_class AS s JOIN pg_depend AS d ON d.objid = s.oid JOIN pg_attribute a ON d.refobjid = a.attrelid AND d.refobjsubid = a.attnum JOIN pg_namespace nsp ON s.relnamespace = nsp.oid WHERE s.relkind = 'S' AND d.refclassid = 'pg_class'::regclass AND d.classid = 'pg_class'::regclass AND nspname NOT IN ('topology', 'tiger') ORDER BY 1,2 DESC;
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una solución que no depende de pg_sequences o pg_sequence_last_value :

 CREATE OR REPLACE FUNCTION get_sequences() RETURNS TABLE ( last_value bigint, sequence_schema text, sequence_name text ) LANGUAGE plpgsql AS $func$ DECLARE s RECORD; BEGIN FOR s IN SELECT t.sequence_schema, t.sequence_name FROM information_schema.sequences t LOOP RETURN QUERY EXECUTE format( 'SELECT last_value, ''%1$s''::text, ''%2$s''::text FROM %1$I.%2$I', s.sequence_schema, s.sequence_name ); END LOOP; END; $func$; SELECT * FROM get_sequences();

Eso generará una tabla como esta:

 last_value | sequence_schema | sequence_name ------------+-----------------+------------------------------------------------------- 1 | public | contact_infos_id_seq 1 | media | photos_id_seq 2006 | company | companies_id_seq 2505 | public | houses_id_seq 1 | public | purchase_numbers_id_seq ... etc

Las otras respuestas solo funcionarán si tiene una versión moderna de Postgres (creo que 10 o más).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda