私はGreenplumDBの使用に不慣れで、OracleDBに取り組んでいました。私は列指向DBのGreenplumを概念的に理解しており、Oracleとは動作が異なります。
私が持っている質問は、テーブルの列の長さを変更することに関するものです。たとえばデータ型character varying(50)
の列を持つテーブルを作成しました。このテーブルの上に、いくつかの情報を要約したビューを作成しました。後で、列の長さをcharacter varying(100)
に変更したいと思いました。 GPでは許可されていません。
ビューを削除し、列の長さを変更してから、ビューを再作成する必要がありました。オラクルの場合はそうは思わなかった。 GPがこれをしなければならない理由がわかりません。
誰かがこれを回避する方法について理解していますか?
タイプやサブタイプについてでさえありません。テーブルの列を変更するには、その列を参照するすべての依存関係を削除して再作成する必要があります。これは、1回のトランザクションで実行できます。
CREATE TABLE foo ( a varchar(10) );
CREATE VIEW bar AS TABLE foo;
BEGIN;
DROP VIEW bar;
ALTER TABLE foo
ALTER COLUMN a
SET DATA TYPE varchar(100);
CREATE VIEW bar AS TABLE foo;
COMMIT;
Greenplumでテーブルを変更またはドロップ/作成するたびに、関連付けられたIDがメタデータテーブルで変更されます。したがって、古いIDを参照するビューは機能しません。これが、ビューを再作成する必要がある理由です。
手順:
ALTER TABLE
DROP VIEW
RECREATE VIEW