string(varchar) 列を整数に変更

フィールドのタイプを string から long.

説明 description

環境
Adobe Campaign Classic Adobe Campaign

問題
現在はタイプがのテーブルの列 stringの場合は数値が含まれ、常に数値が含まれます。

列のタイプを varchar から int既に存在するすべての数字を失うわけではありません。

例えば、次のように alter コマンドを実行する方法や、次のようなその他の方法はありますか。

alter table myTable alter column vColumn int;

解決策 resolution

ソリューション

解決策 1:

  1. タイプの一時列を導入 int.
  2. データベースを更新します。
  3. 元の列の値を新しい列にコピーするワークフローを作成します。
  4. 列のタイプを変更し、データベースを更新します。
  5. 手順 1 で導入した列の値を元の列にコピーするワークフローを作成します。
  6. 一時列を削除し、データベースを更新します。

ソリューション 2 (推奨):

  1. スキーマを編集します。 フィールドタイプを次の値から変更: string から long.
  2. 期間 UPDATE DB STRUCTUREALTER コマンドを次のように指定します。 ALTER コマンドを使用して、列のタイプを INTEGER:

ALTER TABLE NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;

https://www.postgresqltutorial.com/postgresql-change-column-type/

      

解決策 2 が最適なオプションです。  私たちは正確に、 ALTER TABLE のお客様向け。

その ALTER TABLE は、また、良いです データ型バリデーター…。いずれかの行にアルファデータが含まれている場合、変換 (ALTER TABLE) がバウンスします。成功した場合は、すべて設定されます。

同様に、 INT,ではない string3-4 クラスの RDS のアップサイズを変更しても解決できない、あらゆる種類のパフォーマンスの問題を引き起こします。

領域がある場合は、(インデックスを含む)バックアップテーブルを作成し、その時刻を指定することをお勧めします。

select * into backup_nmsrecipient from nmsrecipient;

// add indexes to get accurate simulation

\timing

例:

ALTER TABLE backup_NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;

通常、これはブロックしないカスタムテーブルで行われるので、 pg_stat_activity.

可能性が高い nmsRecipient テーブルが大きいので、この操作中にブロックされます。

PostgreSQL はテーブル全体を再構築する必要があります (完全な真空のように).

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f