Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何保存和恢复ON_ERROR_STOP的值?_Postgresql_Psql - Fatal编程技术网

Postgresql 如何保存和恢复ON_ERROR_STOP的值?

Postgresql 如何保存和恢复ON_ERROR_STOP的值?,postgresql,psql,Postgresql,Psql,是否有办法保存、临时更改并恢复psql ON\u ERROR\u STOP变量的值 基本上,我希望在psql脚本中具有以下道德等价物: 关键是,除非之前设置过,否则末尾的'\set'命令实际上不会设置为\u ERROR\u STOP。我认为在单个psql会话中不可能做到这一点。根据,可以单独使用\set命令列出所有psql变量 可以在shell中记住设置,但这会使整个过程变得毫无用处,因为执行所需的查询集强制执行所需的ON_ERROR_STOP值要简单得多 另一种方法是编写一个匿名代码块,并执行

是否有办法保存、临时更改并恢复psql ON\u ERROR\u STOP变量的值

基本上,我希望在psql脚本中具有以下道德等价物:


关键是,除非之前设置过,否则末尾的'\set'命令实际上不会设置为\u ERROR\u STOP。

我认为在单个psql会话中不可能做到这一点。根据,可以单独使用\set命令列出所有psql变量

可以在shell中记住设置,但这会使整个过程变得毫无用处,因为执行所需的查询集强制执行所需的ON_ERROR_STOP值要简单得多

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

顺便问一下,直接在后面添加和删除列的目的是什么

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

做$$ 开始 如果不存在 从信息_schema.columns中选择1 其中表\u schema='public'和表\u name='foo' 和列_name='bar' 然后 执行格式'ALTER TABLE%I.%I ADD%I text', "公众","富","酒吧",; 如果结束; 完(元);
如果您经常进行此类检查,也可以创建一个函数。

我想避免ADD列上只存在列已存在的错误,但是将此命令与\unset-\set对括起来会使每个非致命错误都静音,这太多了。我发布的方法更选择性地避免了专栏中已经存在的错误。它并不完美:它依赖于一个隐含的假设,即删除列行要么成功,要么由于列不存在错误而失败,或者由于一个可能导致添加列失败的条件而失败。。。。。。几乎可以肯定,这些案例并没有涵盖所有的可能性,但它们涵盖了到目前为止我的代码将面临的最常见的情况。
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;