sql >> データベース >  >> RDS >> PostgreSQL

ビューで使用されるPostgreSQL列を変更する

    この場合の恒久的な解決策

    この問題を完全に回避するには、データ型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 新しいビュー。これにより、基になるテーブルのデータが削除されることはありません。 なります ただし、ビューの追加の属性をすべて削除します。これらの属性も再作成する必要があります。




    1. Oracleで日付をフォーマットする方法

    2. PostgreSQL9.3を使用してCTEUPERTでデフォルト値を生成する

    3. ここで、1=1ステートメント

    4. Oracle SQL、複数の列を連結してテキストを追加