Передать параметр счетчика в скрипт postgres sql - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть скрипт myScript. sql. Я запускаю его с некоторым номером ./myScript.sql 1000. Он выполняется ниже

psql -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} ${DB_INSTANCE} -f myScript.sql -v myNumber="'$1'"> /dev/null

и sql сам

DO
$do$
    DECLARE
        _counter int := 0;
    BEGIN
        WHILE _counter < :myNumber
            LOOP
                _counter := _counter + 1;
                insert into mySchema.myTable (id,action_id)
                values (x, y);
            END LOOP;
    END
$do$

Но это не удается ... Что такое неправильно, я уже пробовал различные варианты, ничего не работает.

1 Ответ

1 голос
/ 01 апреля 2020

PSQL переменные учитываются только в SQL операторах, а не в PL / pg SQL операторах.

Вы можете попробовать:

drop table v_myNumber;
select :myNumber into v_myNumber;
DO
$do$
DECLARE
  _counter int = 0;
  BEGIN
    WHILE _counter <  (select * from v_myNumber) 
    LOOP
      _counter = _counter + 1;
     RAISE NOTICE '_counter=%', _counter;
    END LOOP;
  END;
$do$

Выполнение говорит:

$ psql -e -f tloop.sql  -v myNumber=3
drop table v_myNumber;
DROP TABLE
select 3 into v_myNumber;
SELECT 1
DO
$do$
DECLARE
  _counter int = 0;
  BEGIN
    WHILE _counter <  (select * from v_myNumber) 
    LOOP
      _counter = _counter + 1;
     RAISE NOTICE '_counter=%', _counter;
    END LOOP;
  END;
$do$
psql:tloop.sql:14: NOTICE:  _counter=1
psql:tloop.sql:14: NOTICE:  _counter=2
psql:tloop.sql:14: NOTICE:  _counter=3
DO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...