我在postgresql中有一个名为“mydatabase”的数据库,它有数百个模式,安装在linux服务器上。我将这个数据库用于saas应用程序。它有多个架构用户。我想为选定的架构更新表中的列值
在一个名为“销售”的表中有一个特定的列“百分比”,我想更新所有现有用户(schema)的列值。所以我编写了一个脚本来更新所有模式中的值,这个脚本在windows服务器上运行,但是当我试图在linux服务器上执行这个脚本时,它显示了一个错误enter code here
我写的以下脚本,
DO
$do$
DECLARE
_schema text;
BEGIN
FOR _schema IN
SELECT quote_ident(nspname) -- prevent SQL injection
FROM pg_namespace n
WHERE nspname !~~ 'pg_%' and nspname between 'schema1' and 'schema50'
AND nspname <> 'information_schema'
LOOP
EXECUTE 'SET LOCAL search_path = ' || _schema;
UPDATE sales SET sales.Percentage = 15;
END LOOP;
END
$do$
上面的脚本在windows服务器上运行,但它不在linux服务器上运行。错误如下
错误:关系“销售”栏目“销售”不存在
第1行:更新Sales Set Sales.Percentage=5
^
查询:更新销售集合销售百分比=5
上下文:pl/pgsql函数内联代码块第10行,在sql语句
SQL状态:42703
任何帮助都将不胜感激
最佳答案
不要在更新中的列名之前指定表名:
UPDATE sales SET Percentage = 15
下面的示例演示了这一点:
laika=# create table a (i integer);
CREATE TABLE
laika=# update a set a.i = 1;
ERROR: column "a" of relation "a" does not exist
LINE 1: update a set a.i = 1;
^
laika=# update a set i = 1;
UPDATE 0
关于linux - 如何使查询在linux服务器中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56166363/