將字串(varchar)欄變更為整數

將字串(varchar)欄變更為整數的快速指南,從變更欄位型別 stringlong.

說明 description

環境
Adobe Campaign Classic Adobe Campaign

問題
表格中的欄,雖然目前屬於型別 string,它包含數字,且將一律包含數字。

是否有辦法變更欄的型別 varcharint,不會失去之前所有的數字嗎?

例如,有辦法執行alter指令(如下所示)或任何其他方法,例如:

alter table myTable alter column vColumn int;

解決方法 resolution

解決方案

解決方案1

  1. 引入型別的臨時欄 int.
  2. 更新資料庫。
  3. 建立工作流程,將原始欄的值複製到新欄。
  4. 變更欄的型別並更新資料庫。
  5. 建立工作流程,將步驟1中介紹的欄值複製到原始欄。
  6. 刪除暫存欄並更新資料庫。

解決方案2 (偏好設定)

  1. 編輯結構。 變更欄位型別 stringlong.
  2. 期間 UPDATE DB STRUCTURE,取代 ALTER 命令與以下 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 也很不錯 資料型別驗證器……。如果其中一列有Alpha資料,則轉換(ALTER TABLE)將會彈回……如果成功的話,就表示您已準備就緒。

結構描述應該同樣為 INT,非 string,而且它會導致各種效能問題,即使使用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