Как читать и записывать переменные psql в plpgsql - PullRequest
0 голосов
/ 01 мая 2019

Мне нужно прочитать переменные psql в plpgsql. Кажется, что нет никакого способа сделать это, по крайней мере, я не видел решений.

1) Храните некоторые вар в psql 2) Прочитайте эту переменную в plpgsql и сохраните другую переменную в plpgsql как psql переменная 3) Прочитайте окончательную переменную psql в SQL-запросе

пробовал var: =: var (не работает) Попробовал \ gset в plpgsql (не работает) Понятия не имею, как продолжить

            \set var1 100

            SELECT :var1 AS var1;
            >>
            var1
            ------
             100
            (1 row)
            --All good

             --Assign psql variable using \gset
            SELECT 200 AS var2 \gset

            SELECT :var2 AS var2;
            >>
            var2
            ------
             200
            --All good


            DO $$
            DECLARE
            var3 int;
            BEGIN
                --I want to get psql variable var2. This doesn't work
                var3 := :var2;
                --I want to store var3 to psql variable using \gset method. This doesn't work either
                EXECUTE 'SELECT ' || var3 || ' AS var3 \\gset';
            END $$;

            >>
            ERROR:  syntax error at or near ":"
            LINE 6: var3 := :var2;
                            ^

            --This is what I want in the end
            SELECT :var3 AS var3;
            >>
            ERROR:  syntax error at or near ":"
            LINE 1: SELECT :var3 AS var3;
                           ^
            --This obviously doesn't work

Я хочу прочитать переменные psql в plpgsql, затем что-то с ними сделать и сохранить как новые переменные psql, чтобы потом можно было читать их в запросе sql (OUTSIDE plpgsql !!!).

1 Ответ

0 голосов
/ 02 мая 2019

Вы не можете сделать это.psql - это клиент - plpgsql - это среда программирования на стороне сервера.Оба приложения работают в разных средах - теоретически и часто на разных компьютерах, и каждый раз в разных процессах.Таким образом, вы не можете коснуться psql переменной от plpgsql.Эта функция не поддерживается.

Существует обходной путь - вы можете использовать переменные конфигурации на стороне сервера, которые доступны на языке SQL, а затем доступны с обеих сторон (клиента, сервера).

...