别名表(读/写视图)

时间:2012-10-06 05:21:03

标签: postgresql

我想知道在postgresql中是否可以为表创建一个额外的名称,以便该表可以通过其新别名或原始名称来引用?

为表添加视图,但在更新或插入“视图”时写入基础表。

这样做的目的是能够重命名表而无需一次更新所有数据库客户端(无停机时间)。

2 个答案:

答案 0 :(得分:1)

您可以使用Postgres RULES来执行此操作。

查看this文章。

答案 1 :(得分:0)

@CraigRinger提及this answer

CREATE VIEW alias_as_view as SELECT * FROM original_table;


CREATE FUNCTION write_to_underlying_table() RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' then
    raise notice 'INSERT trigger, NEW = [%]', NEW;
ELSIF TG_OP = 'UPDATE' then
    raise notice 'UPDATE trigger, OLD = [%], NEW = [%]', OLD, NEW;
ELSE
    raise notice 'DELETE trigger, OLD = [%]', OLD;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER view_writable_trigger INSTEAD OF INSERT OR UPDATE OR DELETE 
      ON alias_as_view FOR EACH ROW EXECUTE PROCEDURE write_to_underlying_table();

我暂时拒绝了它,例如失败的查询:

INSERT INTO alias_as_view VALUES ('existing_key', 'some_value');

似乎已成功执行,即使original_table上的实际INSERT语句由于唯一键冲突而失败。