將字串(varchar)欄變更為整數
將字串(varchar)欄變更為整數的快速指南,從變更欄位型別 string
至 long
.
說明 description
環境
Adobe Campaign Classic Adobe Campaign
問題
表格中的欄,雖然目前屬於型別 string
,它包含數字,且將一律包含數字。
是否有辦法變更欄的型別 varchar
至 int
,不會失去之前所有的數字嗎?
例如,有辦法執行alter指令(如下所示)或任何其他方法,例如:
alter table myTable alter column vColumn int;
解決方法 resolution
解決方案
解決方案1:
- 引入型別的臨時欄
int
. - 更新資料庫。
- 建立工作流程,將原始欄的值複製到新欄。
- 變更欄的型別並更新資料庫。
- 建立工作流程,將步驟1中介紹的欄值複製到原始欄。
- 刪除暫存欄並更新資料庫。
解決方案2 (偏好設定):
- 編輯結構。 變更欄位型別
string
至long
. - 期間
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