我在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/

10-13 07:47
查看更多