私はPostgreSQLサーバー9.0.4を使用しています。1.新しいスキーマを作成し、2.そのスキーマの下にテーブルを作成し、3.そのテーブルにデータを挿入します。同じEXECUTEで失敗します。私が試したら
CREATE OR REPLACE FUNCTION pg_temp.test( )
RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN
EXECUTE 'CREATE SCHEMA test; CREATE TABLE test.t (id integer );
INSERT INTO test.t (id) VALUES (0);';
END;
$BODY$;
select pg_temp.test( );
次のエラーで失敗します。
ERROR: schema "test" does not exist
LINE 1: ...t; CREATE TABLE test.t (id integer ); INSERT INTO test.t (id...
^
ただし、同じトランザクションで 2 つの EXECUTE を使用すると、同じことが機能します。
CREATE OR REPLACE FUNCTION pg_temp.test( )
RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN
EXECUTE 'CREATE SCHEMA test; CREATE TABLE test.t (id integer );';
EXECUTE 'INSERT INTO test.t (id) VALUES (0);';
END;
$BODY$;
両者の違いが理解できません。誰かがここで私を助けてくれれば幸いです。
ありがとう。