0

テーブルのデータ型を変更する必要がありますが、依存関係エラーが発生します。INTEGER列のデータ型をNUMERICpg_attributeで直接変更することは可能ですか?

私は試してみましたがALTER TABLE、うまくいきません:

CREATE TABLE documento (
  iddocumento SERIAL, 
  idtipodocumento INTEGER NOT NULL, 
  folio INTEGER NOT NULL, 
  CONSTRAINT pk_documento PRIMARY KEY(iddocumento)
);

ALTER TABLE documento ALTER COLUMN folio TYPE NUMERIC(10,0);

エラー:

ERROR:  cannot alter type of a column used by a view or rule
DETAIL:  rule _RETURN on view vw_xxx depends on column "folio"

列には多くの依存関係があります。

4

3 に答える 3

1

あなたの質問に答えるには:

pg_attributeでINTEGER列のデータ型を直接NUMERICに変更することは可能ですか?

いいえ、そうではありません。データ型integerでありnumeric、バイナリ互換ではありません。一般に、システム カタログをいじろうとするのは非常に悪い考えです。データベースを破壊することは間違いありません。SQL DMLステートメントは、データベースの設計を変更するときに使用するツールです。


@a_horse は、PostgreSQL の制限について既にコメントしています。

@a_horseが説明するような回避策があります-ビューを削除して再作成するためのDDLスクリプトを収集するためにpgAdminを使用しますpsqlも機能します。

もう 1 つの簡単な方法があります。余裕があれば、データベースをダンプし、ダンプをハックして復元します。この方法では、ダンプ内の1 行を変更するだけで済みますdocumento.folio(整数値は数値列にうまく収まります)。

ただし、操作中はデータベースへの排他的アクセスが必要です。つまり、他のすべてのアクセスはその間ブロックされます。したがって、これは基本的に小規模なデータベースまたは開発中のデータベースのみを対象としています。

于 2012-07-12T16:42:51.627 に答える
1

これを試してください:

DROP DROP DROP

ALTER TABLE documento ALTER COLUMN folio TYPE NUMERIC(10,0);

CREATE CREATE CREATE...

確かにうまくいく

于 2013-12-30T21:50:40.383 に答える
0

これは PostgreSQL の非常に厄介な制限です。列がビューで使用されているテーブルの列定義を変更することはできません。

残念ながら、唯一の回避策は、最初にその列を参照するすべてのビューを削除してから、テーブルの変更を行い、ビューを再作成することです。

于 2012-07-12T16:40:39.037 に答える