pgpool経由で違うスキーマで同じテーブル名を定義している場合にSQLが失敗する場合、pgpool_regclass のインストールを忘れているだけ…だったらいいのですが、pgpoolを3.3.1から3.5.1にあげた際に、INSERTが出来なくなりました。
結論から書くと、再度、pgpool_regclass のインストールの手順を踏んだらインストールできるようになりました。
ErogameScapeのDBにはpublic.arrangementテーブルと、bookstore.arrangementテーブルがあります。
それぞれ定義は以下のとおりです。
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のときにインストールしているので存在します。
$ psql -f pgpool-regclass.sql ap2
して、pgpool_regclassを置き換えたら動くようになりました。
結論から書くと、再度、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を置き換えたら動くようになりました。