ホーム > フラッグblog > ページ用コンテンツ > BaserCMS でPostgreSQLを使うときにエラーが出てお問い合わせが追加できない。
TOP
Date 2011/05/26   ページ用コンテンツ

BaserCMS でPostgreSQLを使うときにエラーが出てお問い合わせが追加できない。

「お問合わせ管理」を追加しようとすると、

 

「データベースに問題があります。メール受信データ保存用テーブルの作成に失敗しました。」

 

エラーと出てしまう。

エラーは違うけどデバッグモードでエラーを出した場合こんな感じ

Warning (2): pg_query() [http://php.net/function.pg-query]: Query failed: ERROR:  duplicate key value violates unique constraint "bc_pg_blog_tags_pkey" [CORE/cake/libs/model/datasources/dbo/dbo_postgres.php, line 155]
Warning (512): SQL Error: ERROR:  duplicate key value violates unique constraint "bc_pg_blog_tags_pkey" [CORE/baser/models/datasources/dbo_source.php, line 535]
Query: INSERT INTO "bc_pg_blog_tags" ("name", "modified", "created") VALUES ('SEO', '2012-03-07 12:04:13', '2012-03-07 12:04:13') 

ユーザーフォーラム に初めてアカウントを取って流してみたところ、開発者のryuringさんから直ぐに返事があった。

 

で、どうやらPostgreSQLを利用した場合にシーケンスの値がおかしくなってるらしい。

 

どれどれ・・・と調べてみたところ

 
baser-test=# \d bc_pg_mail_fields_id_seq

     Sequence "public.bc_pg_mail_fields_id_seq"
    Column     |  Type   |          Value           
---------------+---------+--------------------------
 sequence_name | name    | bc_pg_mail_fields_id_seq
 last_value    | bigint  | 1
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 32
 is_cycled     | boolean | f
 is_called     | boolean | t
うん。last_value    が1になってる。こりゃ誤動作するよね。
 
ということで最近似た様なことをやったので
 
select setval('bc_pg_mail_fields_id_seq',(select max(id) from bc_pg_mail_fields));
 
とやってやって、
 
 baser-test=# \d bc_pg_mail_fields_id_seq 
     Sequence "public.bc_pg_mail_fields_id_seq"
    Column     |  Type   |          Value           
---------------+---------+--------------------------
 sequence_name | name    | bc_pg_mail_fields_id_seq
 last_value    | bigint  | 18
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 0
 is_cycled     | boolean | f
 is_called     | boolean | t
 
無事更新。
 
あとあ全部のシーケンスに同じようなSQLを流してOkです。
他にもおかしなところあったら報告しようっと。
 
 
シーケンス更新SQL
select setval('bc_dblogs_id_seq',(select max(id) from bc_dblogs));
select setval('bc_global_menus_id_seq',(select max(id) from bc_global_menus));
select setval('bc_page_categories_id_seq',(select max(id) from bc_page_categories));
select setval('bc_pages_id_seq',(select max(id) from bc_pages));
select setval('bc_permissions_id_seq',(select max(id) from bc_permissions));
select setval('bc_pg_blog_categories_id_seq',(select max(id) from bc_pg_blog_categories));
select setval('bc_pg_blog_comments_id_seq',(select max(id) from bc_pg_blog_comments));
select setval('bc_pg_blog_configs_id_seq',(select max(id) from bc_pg_blog_configs));
select setval('bc_pg_blog_contents_id_seq',(select max(id) from bc_pg_blog_contents));
select setval('bc_pg_blog_posts_id_seq',(select max(id) from bc_pg_blog_posts));
select setval('bc_pg_contact_messages_id_seq',(select max(id) from bc_pg_contact_messages));
select setval('bc_pg_feed_configs_id_seq',(select max(id) from bc_pg_feed_configs));
select setval('bc_pg_feed_details_id_seq',(select max(id) from bc_pg_feed_details));
select setval('bc_pg_mail_configs_id_seq',(select max(id) from bc_pg_mail_configs));
select setval('bc_pg_mail_contents_id_seq',(select max(id) from bc_pg_mail_contents));
select setval('bc_pg_mail_fields_id_seq',(select max(id) from bc_pg_mail_fields));
select setval('bc_pg_messages_id_seq',(select max(id) from bc_pg_messages));
select setval('bc_plugin_contents_id_seq',(select max(id) from bc_plugin_contents));
select setval('bc_plugins_id_seq',(select max(id) from bc_plugins));
select setval('bc_site_configs_id_seq',(select max(id) from bc_site_configs));
select setval('bc_user_groups_id_seq',(select max(id) from bc_user_groups));
select setval('bc_users_id_seq',(select max(id) from bc_users));
select setval('bc_widget_areas_id_seq',(select max(id) from bc_widget_areas));
 
20111103追記  ver1.6.14 20120306更に追記
バージョンが上がってブログのタグやカテゴリ分けができるようになり、
テーブルも増えたみたいなので追記。
select setval('bc_contents_id_seq',(select max(id) from bc_contents));
select setval('bc_pg_blog_posts_blog_tags_id_seq',(select max(id) from bc_pg_blog_posts_blog_tags));
select setval('bc_pg_blog_tags_id_seq',(select max(id) from bc_pg_blog_tags));

この記事をシェアする

TOP

Flagsystem