注文の多いXOOPS屋 TOP現在のブログ旧スタッフblog アーカイブ
このページは 2007〜2008 年に公開していた「株式会社RYUS スタッフblog」のアーカイブです。内容は当時のものです。

Postgresqlのシーケンス名は63文字までしかうけつけない

2008/05/29 03:18   halt   カテゴリ: mono モノ

haltです。

皆さんはタイトルの件。ご存知でしたか?
ドキュメントの上では

識別子とキーワード
http://www.postgresql.jp/document/current/html/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

の部分に書かれていますが、シーケンス名に限らず、識別子に関しては63文字しかうけつけてくれません。

単純に識別子が63文字までという制限であればさほど問題はないのですが、この制限によってcreate table文発行時に自動生成されるシーケンスス名がまるめられてしまうという現象が発生します。

例えば

 myproject_project_control_log(29文字)

というテーブルがあってこのキーが

 myproject_project_control_log_id(32文字)

の場合

myproject_project_control_log_myproject_project_control_log_id_seq

というシーケンス名になるのですが、これは66文字の為、まるめられて

myproject_project_control_log_myproject_project_control_log_seq

という感じになってしまいます。

シーケンス名は「テーブル名」+「カラム名」+「_seq」という構成なので、決め打ちでシーケンスを参照できるはずなのですが、このまるめ処理によってシーケンスを参照する事ができなくなり、エラーが発生します。

実際はここまで長いシーケンス名になる事はあまりないでしょうが、プレフィクスなどをつけている場合は注意したほうがよいでしょう。