首页 > 解决方案 > Postgresql & PgAdmin 简单变量

问题描述

我不明白为什么在 pgAdmin 中创建变量必须如此复杂,但有人可以帮我解决这个概念。我只想创建一个Name来自记录的基本变量。然后我想Name再次搜索。所以这是我需要的一个基本示例:

VAR1 = SELECT "Name" 
FROM "Client"
WHERE "ID" = '1'; // This select will return 'Peter'

SELECT * FROM "Client" WHERE "Name" = VAR1;

我已经尝试了所有这些。创建临时表:

CREATE TEMP TABLE VAR1 AS VALUES (SELECT "Name" FROM "Client" WHERE "UUID" = 1;);
SELECT * FROM "Client" WHERE  Name = VAR1.column1;
...
ERROR:  syntax error at or near "SELECT"
LINE 1: CREATE TEMP TABLE VAR1 AS VALUES (SELECT "Name" FROM "Client...
                                          ^

这在 pgAdmin 中不起作用,它只适用于psql

\set VAR1 (SELECT "Name" FROM "Client" WHERE "ID" = '1')
SELECT * FROM "Client" WHERE name = :VAR1;

这也不起作用:

set session my.vars.id = SELECT "Name" FROM "Client" WHERE "ID" = 1;
SELECT * FROM "Client" WHERE "Name" = current_setting('my.vars.id');
...
ERROR:  syntax error at or near "SELECT"
LINE 1: set session my.vars.id = SELECT "Name" FROM "Client" WHERE "...
                                 ^

目前这不起作用,但期望我为一个简单的VAR1 = x. 即使你得到这个工作,我也请不要这个作为答案:

DO
$$
DECLARE
  VAR1 text = (SELECT "Name" FROM "Client" WHERE "UUID" = 1);
BEGIN
  RETURN (SELECT * FROM "Client" WHERE "Name" = VAR1);
END;
$$
LANGUAGE plpgsql;
...
ERROR:  RETURN cannot have a parameter in function returning void
LINE 6:   RETURN (SELECT * FROM "Client" WHERE "Name" = VAR1);
                 ^

使用WITH不起作用,因为您只能在WITH块正下方使用该变量一次。我希望能够在整个脚本中使用该变量。

为什么这必须如此复杂?VAR1 = x

我已经阅读了许多其他答案(那是我得到所有测试的地方)。所以请不要引用它们,除非它们提供不同的东西。

标签: postgresqlpgadmin

解决方案


推荐阅读