1

psql ON_ERROR_STOP変数の値を保存し、一時的に変更してから復元する方法はありますか?

psql基本的に、私はスクリプトに次の「道徳的同等物」を入れたいと思います。

save_on_error_stop=ON_ERROR_STOP

\unset ON_ERROR_STOP
ALTER TABLE foo DROP COLUMN bar;  -- (for example)
\set ON_ERROR_STOP save_on_error_stop

ALTER TABLE foo ADD COLUMN bar;

重要なのは'\set'、最後のコマンドは、ON_ERROR_STOP前に設定されていないと実際には設定されないということです。

4

1 に答える 1

2

1回のセッションでこれを行うことはできないと思いますpsqlマニュアルによると、\setコマンドを単独で使用してすべてのpsql変数を一覧表示できます。

シェルで設定を記憶することはできますが、目的の値を適用する目的のクエリセットを実行するだけの方がはるかに簡単なので、全体が役に立たなくなりON_ERROR_STOPます。

もう1つの方法は、匿名コードブロックとDO、列を追加する前に列を削除する必要があるかどうかを検出するための追加のロジックを作成することです。

ところで、直後に列を削除して追加する目的は何ですか?


DOそのような列が存在しないことを確認するだけの場合は、このブロックをどのように実行しますか?

DO $$
BEGIN
IF NOT EXISTS (
    SELECT 1 FROM information_schema.columns
     WHERE table_schema='public' AND table_name='foo'
       AND column_name='bar')
THEN
    EXECUTE format('ALTER TABLE %I.%I ADD %I text',
                   'public','foo','bar');
END IF;
END; $$;

このようなチェックを頻繁に行う傾向がある場合は、関数を作成することもできます。

于 2013-02-06T14:16:46.810 に答える