Postgresqlのシーケンス名は63文字までしかうけつけない
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」という構成なので、決め打ちでシーケンスを参照できるはずなのですが、このまるめ処理によってシーケンスを参照する事ができなくなり、エラーが発生します。
実際はここまで長いシーケンス名になる事はあまりないでしょうが、プレフィクスなどをつけている場合は注意したほうがよいでしょう。
RSS feed for comments on this post.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ