小编Ale*_*tin的帖子

在 DO 块内使用由 psql 元命令设置的变量

这是我想做的事情:

\set values foo,bar,baz

DO $$
DECLARE
    value  TEXT;
    values TEXT[] := string_to_array(:'values', ',');
BEGIN
    FOREACH value IN ARRAY values LOOP
        raise notice 'v: %', value;
    END LOOP;
END $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

ERROR:  syntax error at or near ":"
SELECT string_to_array(:'values', ',') INTO values...
                       ^
Run Code Online (Sandbox Code Playgroud)

这是我目前的解决方案,但感觉很糟糕:

\set values foo,bar,baz

PREPARE get_values AS SELECT string_to_array(:'values', ',');

DO $$
DECLARE
    value  TEXT;
    values TEXT[];
BEGIN
    EXECUTE 'EXECUTE get_values' INTO values;

    FOREACH value IN ARRAY values LOOP
        raise notice 'v: %', value; …
Run Code Online (Sandbox Code Playgroud)

postgresql session-variables dynamic-sql psql postgresql-9.4

6
推荐指数
1
解决办法
2802
查看次数