如何保存和恢复ON_ERROR_STOP的值?

时间:2013-02-06 13:52:40

标签: postgresql psql

  

有没有办法保存,暂时更改,然后恢复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,除非之前设置过。

1 个答案:

答案 0 :(得分:2)

我不认为可以在一个psql会话中执行此操作。根据{{​​3}},可以使用\set命令列出所有psql个变量。

可以记住shell中的设置,但这会使整个事情变得毫无用处,因为执行所需的一组查询会强制执行所需的ON_ERROR_STOP值会更加简单。

另一种方法是编写一个匿名代码块和DO一些额外的逻辑来检测,在添加之前是否需要删除列。

BTW,直接删除和添加色谱柱的目的是什么?


如果只是为了确保不存在这样的列,那么manual块如何阻止:

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; $$;

如果您经常进行此类检查,也可以创建一个函数。