0

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

就像为表添加视图一样,但是当您在“视图”上更新或插入时,它会写入基础表。

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

4

2 回答 2

1

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

看看这篇文章。

于 2012-10-06T05:24:41.950 回答
0

@CraigRinger 提到了这个答案

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');

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

于 2012-10-09T10:00:37.443 回答