Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

422
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda