开发者社区> 问答> 正文

PostgreSQL 中 不想让数据插入到某个表应该怎么做?

PostgreSQL 中 不想让数据插入到某个表应该怎么做?

展开
收起
德哥 2015-12-29 09:18:17 3373 0
2 条回答
写回答
取消 提交回答
  • 2019-07-17 18:23:17
    赞同 展开评论 打赏
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    创建do instead nothing规则, 例如
    digoal=> create rule r_insert as on insert to test do instead nothing;
    CREATE RULE
    digoal=> insert into test values (1);
    INSERT 0 0
    digoal=> select * from test ;
     id 
    ----
    (0 rows)

    以上方法对COPY无法生效,因为COPY不走重写规则。
    要让所有数据都无法进入,可以用行触发器。
    pipeline=# create or replace function tg() returns trigger as 
    $$
    
    pipeline$# declare
    pipeline$# begin
    pipeline$#   return null;
    pipeline$# end;
    pipeline$# 
    $$
     language plpgsql;
    
    pipeline=# create trigger tg1 before insert on tbl for each row execute procedure tg();
    CREATE TRIGGER
    
    pipeline=# \d tbl
          Table "public.tbl"
     Column |  Type   | Modifiers 
    --------+---------+-----------
     v_d    | date    | 
     data   | numeric | 
     month  | numeric | 
     year   | numeric | 
    Triggers:
        tg1 BEFORE INSERT ON tbl FOR EACH ROW EXECUTE PROCEDURE tg()
    
    pipeline=# insert into tbl values ('2015-01-01');
    INSERT 0 0
    
    pipeline=# copy tbl from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> '2015-01-01' \N      \N      \N  
    >> \.
    COPY 0
    2019-07-17 18:23:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
金融级 PostgreSQL监控及优化 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像