0

テーブルを新しいエイリアスまたは元の名前で参照できるように、postgresql でテーブルに追加の名前を作成できるかどうか疑問に思っています。

テーブルのビューを追加するのと似ていますが、「ビュー」で更新または挿入すると、基になるテーブルに書き込みます。

これの目的は、一度にすべての db クライアントを更新する必要なく (ダウンタイムなしで) テーブルの名前を変更できるようにすることです。

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

original_table一意のキー違反が原因で実際​​のINSERTステートメントが失敗したにもかかわらず、正常に実行されたようです。

于 2012-10-09T10:00:37.443 に答える