有没有办法保存,暂时更改,然后恢复
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
,除非之前设置过。
答案 0 :(得分:2)
我不认为可以在一个psql
会话中执行此操作。根据{{3}},可以使用\set
命令列出所有psql
个变量。
可以记住shell中的设置,但这会使整个事情变得毫无用处,因为执行所需的一组查询会强制执行所需的ON_ERROR_STOP
值会更加简单。
另一种方法是编写一个匿名代码块和DO
一些额外的逻辑来检测,在添加之前是否需要删除列。
如果只是为了确保不存在这样的列,那么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; $$;
如果您经常进行此类检查,也可以创建一个函数。