PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chức năng theo dõi phụ thuộc

Bước tiếp theo ... (tiếp tục câu trả lời trước của tôi).

function save_views (văn bản tên đối tượng) lưu trữ các chế độ xem tùy thuộc vào tên đối tượng (xem hoặc bảng) trong bảng save_views .

function restore_views () khôi phục các chế độ xem từ bảng save_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; $$;

Kiểm tra:

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

Sử dụng:

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. khôi phục cơ sở dữ liệu về trạng thái cụ thể để thử nghiệm

  2. Nối 2 bảng trong đó hai bộ số trùng nhau trong các cột nối

  3. Tổng hợp các cột với các bộ lọc bổ sung (riêng biệt)

  4. Tối ưu hóa truy vấn GROUP BY để truy xuất hàng mới nhất cho mỗi người dùng

  5. Loại bỏ các thành phố trùng lặp khỏi cơ sở dữ liệu