Eu quero despejar todo o conteúdo de uma tabela, ordenado por sua chave primária . Intuitivamente, gostaria de fazer uma
SELECT * FROM %table_name% ORDER BY %primary_key_of(table_name)%;
Isso seria executado por uma ferramenta externa, conhecendo a lista das tabelas, mas não conhecendo suas chaves primárias.
Se não houver uma opção melhor, podemos assumir que todas as chaves primárias são de coluna única.
Estou usando o PostgreSQL-9.5, mas uma atualização é possível.
Por padrão, o simple
SELECT * FROM %table_name%
não ordenará os resultados por chave primária.Mas você pode obter a lista de colunas da chave primária da tabela:
E, em seguida, crie uma consulta dinâmica com essas colunas na
ORDER BY
cláusula.Adicione
INNER JOIN pg_namespace sch ON sch.oid = tbl.relnamespace
eWHERE
condicionesch.nspname
se você tiver várias tabelas com o mesmo nome em esquemas diferentes.Você pode obter PKs para todas as tabelas em 1 consulta:
Acredito que, se você colocar um índice clusterizado em sua chave primária, o PG o usará por padrão. Hipótese não testada :)
De acordo com https://www.postgresql.org/docs/current/static/sql-cluster.html