DjangoでPostgreSQLをDBに使っている場合はCharFieldにmax_lengthを指定しなくてもエラーにならない

DjangoのCharFieldを新しく追加した際に最長の文字数を指定するmax_lengthオプションをつけ忘れてコミットしてしまうことがありました。
max_lengthは必須オプションのはずなので、そもそもマイグレーションの段階でエラーになってmax_lengthをつけ忘れていることに気づけると思っていましたが、今回はエラーになっておらず後ほど見返すまで気づけませんでした。

現場ではPostgreSQLを使っていて、公式ドキュメントを読んだところPostgreSQLだけはCharFieldにmax_length無しでもエラーにならないようです。

docs.djangoproject.com

ドキュメントには以下の説明がありました。

The maximum length (in characters) of the field. The max_length is enforced at the database level and in Django's validation using MaxLengthValidator. It's required for all database backends included with Django except PostgreSQL, which supports unlimited VARCHAR columns.

unlimited VARCHAR とありますが、以下のstack overflowを見たところ10485760が最大値になるようです。(一般的に気にしないで良い長さだとは思いますが)

stackoverflow.com

SELECT 'x'::varchar(1000000000);
ERROR:  length for type varchar cannot exceed 10485760

一応エラーにならないとはいえmax_lengthは指定していた方がバグを防げると思いますので、後からmax_lengthを追加しました。

DjangoにおけるDBでの挙動の違いが一つ発見できたので面白かったです。