string (varchar)列を integer に変更しています

フィールドタイプを string から long に変更して、string (varchar)列を整数に変更する簡単なガイド。

説明 description

環境

  • Adobe Campaign Classic(ACC)
  • Adobe Campaign(AC)

問題

現在 string 型ですが、数値を含み、常に数値を含むテーブルの列。

列の種類を varchar から int に変更し、既に存在するすべての数値を失わない方法はありますか?

例えば、(以下のように) alter コマンドやその他の方法で実行する方法はありますか。

alter table myTable alter column vColumn int;

解決策 resolution

ソリューション

ソリューション 1:

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

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

  1. スキーマを編集します。 フィールドタイプを string から long に変更します。
  2. UPDATE DB STRUCTURE の際に、ALTER コマンドを次の ALTER コマンドに置き換えます。これにより、列のタイプが INTEGER に変更されます。

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

https://neon.tech/postgresql/postgresql-tutorial/postgresql-change-column-type

      

ソリューション 2 が最適なオプションです。  お客様に対する ALTER TABLE の取り扱い方はまさにそれです。

この ALTER TABLEdatatype バリデーターとしても優れています。。行の 1 つにアルファ データがある場合、コンバージョン(ALTER TABLE)はバウンスします…  成功した場合は、すべて設定されています。

同様に、スキーマも string ではなく INT である必要があります。これにより、3~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