gpt4 book ai didi

postgresql - 如何保存和恢复 ON_ERROR_STOP 的值?

转载 作者:行者123 更新时间:2023-11-29 13:05:19 25 4
gpt4 key购买 nike

Is there a way to save, temporarily change, and then restore the value of the psql ON_ERROR_STOP variable?

基本上,我希望在 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 除非之前已设置。

最佳答案

我认为不可能在单个 psql session 中执行此操作。根据manual , 可以单独使用 \set 命令列出所有 psql 变量。

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

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

顺便说一句,紧接着删除和添加列的目的是什么?


如果只是为了确保不存在这样的列,这个DO怎么样? block :

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

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

关于postgresql - 如何保存和恢复 ON_ERROR_STOP 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14730762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com