業務方要求將pg中的乙個表匯入sqlserver,表約1000萬行。測試了幾種常用的匯入匯出方法,有成功也有失敗的。
如果沒有用到特殊資料型別或者字元,資料量也比較小,這種方法一般是可以的。
裡面會有建表、建索引、授權等語句,需要處理一下,或者可以用 --data-only選項。
pg_dump -d dbname -u username -t tablename --inserts > tablename.sql
根據檔案大小分為三種情況:
#cd到檔案所在目錄
sqlcmd -i ***.sql -d dbname
在測試環境執行的時候2g的sql檔案執行占用記憶體超過15g(並且還在往**)
測試bulk insert效率很高,960萬行資料執行約53秒,對記憶體影響也不大。
psql -d dbname
\copy (select * from ***) to '/tmp/***.csv' delimiter ',' csv;
大多數pg裝在linux,sqlserver裝在windows,所以要特別注意換行符的問題,否則執行bulk insert的時候會報錯第一行最後一列過長,因為它識別不到換行符,把後面的所有資料都當做第一行最後一列。
#linux格式轉windows
sed -e 's/$/\r/' 1pnet.txt >dos.txt
bulk insert 庫名..表名
from 'c:\test.csv'
with (
fieldterminator = ',', ---分隔符
rowterminator = '\n' ---換行符
)
第一步同上,第二步使用sqlserver匯入匯出嚮導,匯入型別選擇「平面檔案」,定義列名及型別。
但說實話匯入匯出嚮導經常會遇到奇奇怪怪的報錯,而且搜不到啥好的解決方法,本次遇到報錯如下
根據搜到的文章說是字符集問題,但檢查匯入表裡並沒有特別字元,改換匯入時選擇的字符集後也無效,暫未找到解決方法
第一步同上,第二步使用bcp匯入
參考
從access匯入資料到sqlserver
執行 select into 巡查記錄1 from opendatasource microsoft.jet.oledb.4.0 data source e 匯入匯出 black hd catayou 20071128.mdb persist security info false jet oled...
bcp命令匯入大量資料到sql server
公司進行年終總結,需要對300w客戶進行追蹤,但是這300w客戶的id匯入資料庫中讓我小小糾結了一下。因為需求部門提給我的是excel的資料格式,所以第一反應是用excel匯入,但是sql server2005只支援office 2003的格式,所以只能用xls匯入,但是xls一張表只能支援6553...
匯入Excel資料至Access
private void getexcelsheetsbyupload string strexcelpath oledbconn new oledbconnection connstring oledbconn.open 取得到包含資料架構的資料表 dt oledbconn.getoledbsch...