Matheus, essa query mata a charada !

Com pequenos ajustes (presentes na transcrição a seguir), meu problema está
resolvido !

SELECT s.relname AS sequence, t.relname AS table, a.attname AS column_pk
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
     *JOIN pg_namespace ON pg_namespace.oid=s.relnamespace*
WHERE s.relkind = 'S'
*AND pg_namespace.nspname='<schema_de_interesse>'*

Valeu !

Marcos Nobre

Em 13 de agosto de 2012 16:52, Matheus de Oliveira <
[email protected]> escreveu:
> 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
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a