PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja śledzenia zależności

Następny krok... (kontynuacja mojej poprzedniej odpowiedzi).

funkcja save_views(tekst nazwy obiektu) przechowuje widoki w zależności od nazwy obiektu (widok lub tabela) w tabeli zapisane_widoki .

funkcja restore_views() przywraca widoki z tabeli saved_views .

create or replace function save_views_oid(objectid oid)
returns void language plpgsql as $$
declare
    r record;
begin
    for r in
        select distinct c.oid, c.relname, n.nspname
        from pg_depend d
        join pg_rewrite w on w.oid = d.objid
        join pg_class c on c.oid = w.ev_class
        join pg_namespace n on n.oid = c.relnamespace
        where d.refclassid = 'pg_class'::regclass 
        and d.classid = 'pg_rewrite'::regclass
        and d.refobjid = objectid
        and c.oid <> objectid
    loop
        insert into saved_views values (
            'CREATE VIEW ' || r.nspname || '.' || r.relname ||
            ' AS ' || pg_get_viewdef(r.oid, 'f'));
        perform save_views_oid(r.oid);
    end loop;
end; $$;

create or replace function save_views(objectname text)
returns void language plpgsql as $$
begin
    create table if not exists saved_views(viewbody text);
    truncate saved_views;
    perform save_views_oid(objectname::regclass);
end; $$;

create or replace function restore_views()
returns void language plpgsql as $$
declare
    viewtext text;
begin
    for viewtext in
        select viewbody from saved_views
    loop
        execute viewtext;
    end loop;
    drop table saved_views;
end; $$;

Test:

select save_views('my_view'); -- may be save_views('my_schema.my_view');
select * from saved_views;

Użyj:

select save_views('my_view'); 
drop view my_view cascade;
create view my_view as ...
select restore_views();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL — odwołania do kluczy obcych wzajemnie wykluczające się tabele

  2. Bardziej niezawodne zestawienia z obsługą ICU w PostgreSQL 10

  3. Instalacja postgresql z Homebrew i Rails na Mountain Lion

  4. Błąd w Spring Data JPA:Spring Data zwraca List<BigInteger> zamiast List<Long>

  5. Zapytanie rekurencyjne z sumą w Postgresie