2012/8/13 Matheus de Oliveira <[email protected]>

>
> 2012/8/13 Flavio Henrique Araque Gurgel <[email protected]>
>
>> Em 10-08-2012 17:20, Marcos Aurelio Nobre escreveu:
>> > Boa tarde pessoal.
>>
>> Sou só eu ou mais pessoas estão recebendo mensagens com data do dia 10
>> da lista só hoje?
>>
>>
> Não, eu também recebi com dia 10.
>
>
>> > Eu estou precisando consultar nas sys_tables quais são as Sequences e
>> > respectivas Tabelas a que estão associadas,
>> > "dentro" de determinado schema.
>> >
>> > Alguém saberia me dizer como que eu Quero o banco para me prover esta
>> > consulta/listagem ?
>>
>> Acho que isso não é possível.
>>
>> As sequências *não* são associadas a tabelas.
>>
>> O que se faz é utilizá-las como valor padrão para determinada coluna, ou
>> utilizar gatilhos e outras funções para obter o valor da sequência.
>> Note que uma sequência pode ser inclusive utilizada por mais de uma
>> tabela.
>>
>> A associação sequência <-> tabela é mera formalidade para a utilização
>> de valores seriais em determinadas colunas.
>>
>>
> Na verdade, existe sim uma certa dependência, mas não é tão restrita.
>
> Veja em [1], na criação (ou alteração) de uma sequence você pode definir um
> campo de uma tabela para ser o "dono" dessa sequence. Bastando definir
> OWNDED BY tabela.coluna.
>
> Isso não deixa de ser uma "mera formalidade", como você disse, mas garante
> que ao excluir a coluna, a sequence será excluída também.
>
> Marcos, para recuperar as sequences, é simples, basta consultar a tabela
> pg_class filtrando por relkind = 'S' (OBS: S maiúsculo). Agora, pegar
> a dependência (que citei acima), eu não sei, mas tem armazenado em algum
> lugar, vou ver se acho aqui, talvez seja na pg_depends.
>
> [1] http://www.postgresql.org/docs/9.1/static/sql-createsequence.html
>
>
Fiz uns testes aqui e parece que é baseado só na pg_depend mesmo, quando eu
altero o OWNED BY ela é alterada.

E, seguindo isso consegui chegar na seguinte consulta:

SELECT s.relname AS sequence, t.relname AS table, a.attname AS column
FROM pg_class s
     JOIN pg_depend d ON s.oid = d.objid
     JOIN pg_class t ON d.refobjid = t.oid
     JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = d.refobjsubid
WHERE s.relkind = 'S';

Veja que só funcionará se você usou corretamente o OWNED BY. E, saiba
também que se você criou os tipos como serial, bigserial ou smallserial,
isso já foi feito para você.

--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a