2

私はテーブルを持っていますA(colmn1 varchar(10),column2 varchar2(20));

しかし、私はに変換する必要がありdatatype varcharますtext[] array

table A(column1 text[],column2 text[])

このテーブルの列を変更する方法を教えてください

4

4 に答える 4

4

あなたvarcharをに変換する暗黙のキャストはないので、 USING 句text[]を使用して変換を行う方法を指定する必要があります。

オプションのUSING句は、古い列の値から新しい列の値を計算する方法を指定します。省略した場合、デフォルトの変換は、古いデータ型から新しいデータ型への代入キャストと同じです。USING古い型から新しい型への暗黙のキャストまたは代入キャストがない場合は、句を指定する必要があります。

このような単純なものでうまくいくはずです:

alter table A alter column column1 type text[] using array[column1];

他の列についても同様です。

于 2013-10-08T04:56:05.407 に答える
1

これは機能し、null 要素を含む配列である値を作成しないようにもします。

ALTER TABLE myTable ALTER COLUMN myColumn TYPE varchar[] USING CASE WHEN myColumn IS null THEN null ELSE array[myColumn] END;
于 2014-02-24T19:24:21.497 に答える
1

列を別のデータ型に変換するには、次のようなコマンドを使用します。

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text[] Using array[ColumnName];;

これは、列内の既存の各エントリを暗黙的なキャストによって新しい型に変換できる場合にのみ成功します。より複雑な変換が必要な場合は、古い値から新しい値を計算する方法を指定する USING 句を追加できます。

PostgreSQL は、列のデフォルト値 (存在する場合) を新しい型に変換しようとします。また、列に関連する制約もすべて変換しようとします。しかし、これらの変換は失敗するか、驚くべき結果をもたらす可能性があります。多くの場合、型を変更する前に列の制約を削除し、適切に変更された制約を後で追加し直すことをお勧めします。

于 2013-10-08T04:41:37.287 に答える
1

本当にテキスト[]が欲しいですか??? 'text' は文字列を保存できます。text[] は必要ありません。

postgresql docは以下のようなものです

さらに、PostgreSQL は任意の長さの文字列を格納する text 型を提供します。タイプ テキストは SQL 標準にはありませんが、他のいくつかの SQL データベース管理システムにも同様のタイプがあります。

下に入力するだけです

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text;
于 2013-10-08T04:57:28.500 に答える