segunda-feira, 4 de outubro de 2010

Mais views para administração do PostgreSQL

Mais views para administração do PostgreSQL

--atualizada vw_find_seq
-- view para procuar as sequencias
DROP VIEW IF EXISTS vw_find_seq;
CREATE OR REPLACE VIEW vw_find_seq AS
(
     SELECT c.oid AS oid_seq,
            n.nspname AS esquema,
            c.relname AS seq,
            pg_catalog.pg_get_userbyid(c.relowner) AS dono,
            pg_catalog.obj_description(c.oid, 'pg_class') AS comentario,
            reltuples::integer AS registros
       FROM pg_catalog.pg_class c
  LEFT JOIN pg_catalog.pg_namespace n
         ON n.oid = c.relnamespace
      WHERE c.relkind = 'S' -- r = ordinary table, i = index, S = sequence, v = view, c = composite type, t = TOAST table
        AND n.nspname NOT IN (
                               'pg_catalog',
                               'information_schema',
                               'pg_toast'
                             )
   ORDER BY n.nspname,
            c.relname

);
COMMENT ON VIEW vw_find_seq IS '
Autor: O Peregrino
View que procura por esquemas, sequencia, comentários, donos no banco
--exemplos:

--busca simples (tudo)
     SELECT *
       FROM vw_find_seq
     ;

--busca por esquema
     SELECT *
       FROM vw_find_seq
      WHERE esquema ILIKE \\\'esquema\\\'
      ;

--busca por tabelas
     SELECT *
       FROM vw_find_seq
      WHERE seq ILIKE \\\'%seq%\\\'
      ;
      
'
;

--incrementada
--View que retorna uma query com o objetivo de descobrir qual o maior id de todas as sequenciasa de um banco de dados. 

DROP VIEW IF EXISTS vw_max_id_seq CASCADE;
CREATE OR REPLACE VIEW vw_max_id_seq AS
(
               (
               SELECT 'SELECT '
                   || '\''||x.esquema||'.'||x.seq||'\''
                   || ' AS esquema_seq'
                   || ','
                   || ' (SELECT  last_value FROM '
                   || x.esquema
                   || '.'
                   || x.seq
                   || ')::BIGINT AS maior_id_seq UNION '
                   AS maior_ids_seq
                 FROM (
                       SELECT *
                         FROM vw_find_seq
                        WHERE esquema
                       NOT IN ('z_deprecated')
                          AND seq NOT ILIKE '@%'
                     ORDER BY esquema ASC
                            , seq     ASC
                       ) AS x
               )
         UNION
               (
                 SELECT 'SELECT \'ZZZ-FIM-USADO-PARA-CONTROLE\' AS esquema_seq,  0::BIGINT AS maior_id_seq ORDER BY 2 DESC;' AS maior_ids_seq
               )
        ORDER BY 1 ASC
);
COMMENT ON VIEW vw_max_id IS '
Autor: O Peregrino
View que retorna uma query com o objetivo de descobrir qual o maior id de todas a tabela de um banco de dados
-- O resultado desta view gera um nova query para obter o resultado
--  desejado.
-- Esta consulta pega o maior id de todas tabelas de um banco.
-- É gerado apenas um coluna como resultado da view com query.
--  para obter o valor maximo gerado de um id em uma sequencia, de todas as tabelas de um  banco.
-- Dica para execução:
-- No pgadmin selecione CTRL + A, CTRL + C no resultado da query,
--  Abrir uma nova query, CTRL + V,  CTRL + HOME,
--  CTRL + F, substituir " por nada, recomendado, em vez de " ser |, se estiver configurado
--  Clicar em (Substituir TODOS) e depois em (Fechar)
--  Executar query (f5)
-- Será retornada 2 colunas: esquema_seq e o maior_id baseado na sequencia
-- Essa view vw_max_id_seq usa a view vw_find_seq
--SELECT * FROM vw_max_id_seq;
'
;  

Nenhum comentário:

Postar um comentário