У меня есть следующий код в файл .sql, что я бегу от моей базы данных PostgreSQL:переменная строка декларации в .sql файл сбой с ошибкой синтаксиса
INSERT INTO widget (username)
SELECT i
FROM generate_series(100, 150) AS t(i);
INSERT INTO widget2
SELECT generate_series(100, 150), 'statictext', generate_series(100, 150);
И я бегу это делать что-то вроде «PSQL - U MyUser -d виджетов -f addwidgets.sql Но теперь мне нужно параметризовать эти пункты Так что я создал эту версию вместо:.
DECLARE startnum INTEGER;
DECLARE endnum INTEGER;
startnum:=100;
endnum:=150;
INSERT INTO widget (username)
SELECT i
FROM generate_series(startnum, endnum) AS t(i);
INSERT INTO widget2
SELECT generate_series(startnum, endnum), 'statictext', generate_series(startnum, endnum);
Но это бомба, потому что он не хотел, чтобы мои startnum/endnum переменных . Сообщение об ошибке:
psql:addwidgets.sql:1: ERROR: syntax error at or near "INTEGER"
LINE 1: DECLARE startnum INTEGER;
В поисках ответа я обнаружил, что это может быть связано с языком, который я использую в psql. Прямо сейчас я googling, как узнать, какой язык сценариев мой механизм базы данных настроен для понимания. Но в то же время, если у вас есть предложения, я был бы признателен.
EDIT 1
Так что я нашел это:
testbox:/tmp# psql -U postgres -d widgets -c "select * from pg_language;"
lanname | lanowner | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator | lanacl
----------+----------+---------+--------------+---------------+-----------+--------------+--------
internal | 10 | f | f | 0 | 0 | 2246 |
c | 10 | f | f | 0 | 0 | 2247 |
sql | 10 | f | t | 0 | 0 | 2248 |
plpgsql | 10 | t | t | 11864 | 11865 | 11866 |
Возможно, я должен указать, в верхней части моего .sql файла, на каком языке я использую? это также поможет мне узнать, какая документация для ссылки я предполагаю. :)
Я не думаю, что вы можете просто написать сырец PL/PgSQL , вы можете создавать с ним функции. –
функция как в сохраненной proc? я не думаю, что это то, что я хочу делать ... если, конечно, я должен. этот скрипт будет работать как часть процесса инициализации базы данных и засеять его некоторыми необходимыми данными. – Happydevdays
вы не можете смешивать PL/pgSQL с простым SQL. Вам, по крайней мере, нужно поместить код PL/pgSQL в блок 'DO': https://www.postgresql.org/docs/current/static/sql-do.html –