pgpool経由で違うスキーマで同じテーブル名を定義している場合にSQLが失敗する場合、pgpool_regclass のインストールを忘れているだけ…だったらいいのですが、pgpoolを3.3.1から3.5.1にあげた際に、INSERTが出来なくなりました。

結論から書くと、再度、pgpool_regclass のインストールの手順を踏んだらインストールできるようになりました。


ErogameScapeのDBにはpublic.arrangementテーブルと、bookstore.arrangementテーブルがあります。
それぞれ定義は以下のとおりです。

ap2=# \d arrangement
                   テーブル "public.arrangement"
     列     |             型              |         修飾語
------------+-----------------------------+------------------------
 music      | integer                     | not null
 creater    | integer                     | not null
 created_at | timestamp without time zone | not null default now()
 updated_at | timestamp without time zone | not null default now()

ap2=# \d bookstore.arrangement
                                      テーブル "bookstore.arrangement"
    列    |             型              |                               修飾語
----------+-----------------------------+--------------------------------------------------------------------
 id       | integer                     | not null default nextval('bookstore.arrangement_id_seq'::regclass)
 users_id | integer                     | not null
 group_id | integer                     | not null
 shelf_id | integer                     | not null
 x        | integer                     | not null
 volumes  | integer                     | not null
 asin     | text                        | not null
 z        | integer                     | not null
 created  | timestamp without time zone | not null default now()
 modified | timestamp without time zone | not null default now()

これに以下のSQL発行すると失敗しました。
ap2=#  INSERT INTO public.arrangement ( music , creater ) VALUES ( '6419' , '1' ) ;
ERROR:  column "created" of relation "arrangement" does not exist
ap2=#  INSERT INTO arrangement ( music , creater ) VALUES ( '6419' , '1' ) ;
ERROR:  column "created" of relation "arrangement" does not exist
※pgpool_regclassをインストールしても、理由は調べていないのですがスキーマを指定しないとINSERTが失敗する…publicスキーマのarrangementテーブルにINSERTして欲しいのに、bookstoreスキーマのarrangementテーブルにINSERTしようとするので、明示的にpublicスキーマを指定していました。しかし、3.5.1にあげたら、publicスキーマを指定してもNGでした。

PostgreSQLのログは以下の通りです。

< 2016-04-28 20:30:51.281 JST > user=ap2 p=486 ERROR:  column "created" of relation "arrangement" does not exist at character 84
< 2016-04-28 20:30:51.281 JST > user=ap2 p=486 STATEMENT:  INSERT INTO "public"."arrangement"("music", "creater", "created_at", "updated_at", "created", "modified") VALUES ('6419','1','2016-04-28 20:30:51.268123+09','2016-04-28 20:30:51.268123+09','2016-04-28 20:30:51.268123+09','2016-04-28 20:30:51.268123+09')
< 2016-04-28 20:32:15.773 JST > user=ap2 p=706 ERROR:  column "created" of relation "arrangement" does not exist at character 84
< 2016-04-28 20:32:15.773 JST > user=ap2 p=706 STATEMENT:  INSERT INTO "public"."arrangement"("music", "creater", "created_at", "updated_at", "created", "modified") VALUES ('6419','1','2016-04-28 20:32:15.76399+09','2016-04-28 20:32:15.76399+09','2016-04-28 20:32:15.76399+09','2016-04-28 20:32:15.76399+09')

pgpool_regclass関数は3.3.1のときにインストールしているので存在します。
ap2=# select * FROM pg_available_extensions WHERE name = 'pgpool_regclass';
      name       | default_version | installed_version |         comment
-----------------+-----------------+-------------------+--------------------------
 pgpool_regclass | 1.0             |                   | replacement for regclass
(1 行)
再度、
$ psql -f pgpool-regclass.sql ap2
して、pgpool_regclassを置き換えたら動くようになりました。