У меня есть два файла, которые отлично работают при их исполнении в Postgres.Объединение нескольких сценариев postgres в одном файле
Файл 1
CREATE TABLE ContractStatusEnum (
id SERIAL PRIMARY KEY,
description VARCHAR(4000) NOT NULL
);
* Файл 2
DO $$ BEGIN
IF NOT EXISTS (SELECT * FROM ContractStatusEnum WHERE id = 1) THEN
INSERT INTO ContractStatusEnum (id, description) VALUES
(1, 'Ordered'),
(2, 'Active'),
(3, 'Stopped'),
(4, 'Canceled'),
(10, 'Inactive');
END IF;
END $$
Однако, если я просто положить их вместе в один файл, он терпит неудачу с
ERROR: syntax error at or near "DO"
LINE 6: DO $$ BEGIN
О MS SQL Я могу решить это с помощью креатина g новый контекст, поставив оператор GO
между двумя сценариями. Любой ключ, как это сделать в Postgres 9?
'Do' действительна только в pgplsql. Вы можете опустить это. Просто конкатенируйте фрагменты (возможно, каждый оператор заканчивается точкой с запятой. Синтаксис 'IF NOT EXISTS' недействителен: вместо этого используйте предложение WHERE. – wildplasser
Оператор' IF NOT EXISTS' отлично работает при выполнении второго файла в postgres без конкатенации. Должен ли я запускать полный скрипт в pgplsql? –
Да, вы можете даже перенаправить stdin для psql и использовать канал или '<', чтобы отправить весь файл сценария. Ehh: no, вам не нужно pgplsql, чтобы отправить код sql. просто исполняемый файл psql «terminal». – wildplasser