テーブルを新しいエイリアスまたは元の名前で参照できるように、postgresql でテーブルに追加の名前を作成できるかどうか疑問に思っています。
テーブルのビューを追加するのと似ていますが、「ビュー」で更新または挿入すると、基になるテーブルに書き込みます。
これの目的は、一度にすべての db クライアントを更新する必要なく (ダウンタイムなしで) テーブルの名前を変更できるようにすることです。
テーブルを新しいエイリアスまたは元の名前で参照できるように、postgresql でテーブルに追加の名前を作成できるかどうか疑問に思っています。
テーブルのビューを追加するのと似ていますが、「ビュー」で更新または挿入すると、基になるテーブルに書き込みます。
これの目的は、一度にすべての db クライアントを更新する必要なく (ダウンタイムなしで) テーブルの名前を変更できるようにすることです。
Postgres RULES を使用してこれを行うことができます。
この記事をチェックしてください。
@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ステートメントが失敗したにもかかわらず、正常に実行されたようです。