DDL+SQL in PL/pgSQL EXECUTE

Поиск
Список
Период
Сортировка
От Vlad Arkhipov
Тема DDL+SQL in PL/pgSQL EXECUTE
Дата
Msg-id 49C0C9C8.9020007@dc.baikal.ru
обсуждение исходный текст
Ответы Re: DDL+SQL in PL/pgSQL EXECUTE
Список pgsql-hackers
Is it a bug or by design? I could not find what behaviour is correct for 
these statements in PL/pgSQL:

This function just executes a string.
CREATE OR REPLACE FUNCTION _EXEC(query VARCHAR)
RETURNS VOID AS $$
BEGIN EXECUTE query;
END;
$$ LANGUAGE 'plpgsql';

1. Works ok.
BEGIN WORK;
SELECT _EXEC('CREATE TABLE T(ID INTEGER); CREATE INDEX T_IDX ON T(ID)');
ROLLBACK;

2. Works ok.
BEGIN WORK;
SELECT _EXEC('CREATE TABLE T(ID INTEGER); ALTER TABLE T ADD COLUMN ID2 
INTEGER; CREATE INDEX T_IDX2 ON T(ID2)');
ROLLBACK;

3. ERROR:  relation "t" does not exist
SELECT _EXEC('CREATE TABLE T(ID INTEGER); INSERT INTO T(ID) VALUES (1)');

4. Inserts NULL value into ID column instead of default 10.
BEGIN WORK;
CREATE TABLE T(ID INTEGER);
SELECT _EXEC('ALTER TABLE T ALTER COLUMN ID SET DEFAULT(10); INSERT INTO 
T DEFAULT VALUES');
SELECT * FROM T;



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Dave Page
Дата:
Сообщение: Re: Path separator
Следующее
От: Tom Lane
Дата:
Сообщение: cs_CZ vs regression tests, part N