[pgsql-jp: 40049] Re: EXECUTE USINGについて

Yusuke Yamasaki tm9233yy @ gmail.com
2009年 11月 4日 (水) 20:20:52 JST


山崎(ゆ)です。

> 石田さん
返信ありがとうございます。

>    EXECUTE 'CREATE TABLE ' ||part|| ' (LIKE ' ||parent
>    || ' INCLUDING INDEXES INCLUDING DEFAULTS INCLUDING CONSTRAINTS, '
>    || 'CHECK ($1 <= $2 AND $2 < $3)'
>    || ') INHERITS (' ||parent|| ')'
>    USING t_beg, t_cur, t_end;

結果は同じようなエラーになりました。

ERROR:  there is no parameter $1
CONTEXT:  SQL statement "CREATE TABLE events_0911 (LIKE events
INCLUDING INDEXES INCLUDING DEFAULTS INCLUDING CONSTRAINTS, CHECK ($1
<= $2 AND $2 < $3)) INHERITS (events)"
PL/pgSQL function "event_insert_trigger" line 17 at EXECUTE statement

ちなみに最初に書いた(1)のコードは間違っていました。あれだとCHECK条件は常に真でした。

(1)の訂正

     EXECUTE 'CREATE TABLE ' ||part|| ' (LIKE ' ||parent|| ' INCLUDING
INDEXES INCLUDING DEFAULTS INCLUDING CONSTRAINTS, '
     || 'CHECK (' ||quote_literal(t_beg)|| ' <= created_at AND
created_at < ' ||quote_literal(t_end)|| ')'
     || ') INHERITS (' ||parent|| ')';

CHECK制約は以下のように定義されました。
11月のレコードがevents_0911テーブルに振り分けられます。

"events_0911_created_at_check" CHECK ('2009-11-01 00:00:00'::timestamp
without time zone <= created_at AND created_at < '2009-12-01
00:00:00'::timestamp without time zone)


(2) もこれに合わせると、以下のようになります。

(2)の訂正

     EXECUTE 'CREATE TABLE ' ||part|| ' (LIKE ' ||parent
     || ' INCLUDING INDEXES INCLUDING DEFAULTS INCLUDING CONSTRAINTS, '
     || 'CHECK ($1 <= created_at AND created_at < $2)'
     || ') INHERITS (' ||parent|| ')'
     USING t_beg, t_end;


いずれにしてもこれはエラーになりました。

ERROR:  there is no parameter $1
CONTEXT:  SQL statement "CREATE TABLE events_0911 (LIKE events
INCLUDING INDEXES INCLUDING DEFAULTS INCLUDING CONSTRAINTS, CHECK ($1
<= created_at AND created_at < $2)) INHERITS (events)"

-- 
Yusuke Yamasaki <tm9233yy @ gmail.com>



pgsql-jp メーリングリストの案内