我想知道在postgresql中是否可以为表创建一个额外的名称,以便该表可以通过其新别名或原始名称来引用?
为表添加视图,但在更新或插入“视图”时写入基础表。
这样做的目的是能够重命名表而无需一次更新所有数据库客户端(无停机时间)。
答案 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语句由于唯一键冲突而失败。