如何使查询在Linux服务器上工作?

时间:2019-05-16 10:25:29

标签: linux postgresql

我在PostgreSQL中有一个名为“ myDatabase”的数据库,该数据库具有数百种模式,并已安装在Linux服务器中。我正在将此数据库用于SAAS应用程序。具有多个架构用户。我想为所选模式更新表中的列值

在名为“ sales”的表中有一个特殊的列“ Percentage”,我想为所有现有用户(架构)更新该列的值。因此,我编写了一个脚本来更新所有模式中的值,该脚本在Windows Server中运行,但是当我尝试在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服务器中无效。错误在下面给出

错误:关系“ sales”的列“ sales”不存在 第1行:更新sales set sales.Percentage = 5                               ^ 查询:UPDATE sales set sales.Percentage = 5 上下文:SQL语句中的PL / pgSQL函数inline_code_block第10行 SQL状态:42703

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

不要在更新的列名之前指定表名:

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