我在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
任何帮助将不胜感激
答案 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