Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!