この場合の恒久的な解決策
この問題を完全に回避するには、データ型text
を使用します またはvarchar
/character varying
character varying(n)
の代わりに長さ指定子なし 。マニュアルでこれらのデータ型についてお読みください。
CREATE TABLE monkey(name text NOT NULL)
本当に最大長を適用したい場合は、 CHECK
を作成してください 制約 :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
ビューなどの依存オブジェクトに触れることなく、またタイプの変更のためにPostgresにテーブルに新しい行を書き込むように強制することなく、いつでもその制約を変更または削除できます(Postgresの最新バージョンでは必ずしも必要ではありません)。
詳細な説明
@Michaelによって提案されたように、私はいくつかのより一般的な情報を追加します:
PostgreSQLのビューは、単なる「サブクエリのエイリアス」ではありません。ビューは、ON SELECT TO my_view DO INSTEAD
というルールを持つ特別なテーブルとして実装されます。 。 (そのため、ALTER TABLE
を使用してビューを変更できます。 コマンド。)GRANT
それに特権を与えたり、コメントを追加したり、列のデフォルトを定義したりすることもできます(ON INSERT TO my_view DO INSTEAD...
のルールに役立ちます )。詳細については、こちらまたはこちらのマニュアルをご覧ください。
基になるオブジェクトを変更する場合は、依存するビューの定義クエリも変更する必要があります。 ALTER VIEW
ステートメントは、ビューの補助属性のみを変更できます。 CREATE OR REPLACE VIEW
を使用する クエリを変更するには、追加の属性が保持されます。
ただし、結果の列のデータ型を変更する場合(手元の場合など)、CREATE OR REPLACE VIEW
不可能である。 DROP
する必要があります 古いものとCREATE
新しいビュー。これにより、基になるテーブルのデータが削除されることはありません。 なります ただし、ビューの追加の属性をすべて削除します。これらの属性も再作成する必要があります。