postgresql----COPY之表與文件之間的拷貝

postgresql提供了COPY命令用於表與文件(和標準輸出,標準輸入)之間的相互拷貝,copy to由表至文件,copy from由文件至表。sql

 

示例1.將整張表拷貝至標準輸出數據庫

test=# copy tbl_test1 to stdout;
1    HA    12
2    ha    543

 

示例2.將表的部分字段拷貝至標準輸出,並輸出字段名稱,字段間使用','分隔post

test=# copy tbl_test1(a,b) to stdout delimiter ',' csv header;
a,b
1,HA
2,ha

 

示例3.將查詢結果拷貝至標準輸出編碼

test=# copy (select a,b from tbl_test1 except select e,f from tbl_test2 ) to stdout delimiter ',' quote '"' csv header;
a,b
2,ha

 

將標準輸入拷貝至表中須要注意幾點excel

1.字段間分隔符默認使用【Tab】鍵postgresql

2.換行使用回車鍵it

3.結束使用反斜線+英文據點(\.)io

4.最好指定字段順序,要否則可能會錯位賦值test

 

示例4.將標準輸入拷貝至表中亂碼

複製代碼

test=# copy tbl_test1(a,b,c) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1    公舉    公主
>> 2    萬歲    萬萬歲
>> \.
COPY 2
test=# select * from tbl_test1 ;
 a |  b   |   c    
---+------+--------
 1 | HA   | 12
 2 | ha   | 543
 1 | 公舉 | 公主
 2 | 萬歲 | 萬萬歲
(4 rows)

複製代碼

 

示例5.從標準輸入拷貝至表中,並將標準輸入第一行做爲字段名(和表中不符也不要緊,copy會自動忽略第一行),字段分隔符爲','

複製代碼

test=# copy tbl_test1(a,b,c) from stdin delimiter ',' csv header;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> a,b,c
>> 3,你好,hello
>> 4,超人,super
>> \.
COPY 2
test=# select * from tbl_test1 ;
 a |  b   |   c    
---+------+--------
 1 | HA   | 12
 2 | ha   | 543
 1 | 公舉 | 公主
 2 | 萬歲 | 萬萬歲
 3 | 你好 | hello
 4 | 超人 | super
(6 rows)

複製代碼

 

以上是表與標準輸出和標準輸入間的相互拷貝,表與文件的拷貝和以上徹底相同,只是將標準輸出和標準輸入換成文件。須要注意的是:

1.數據庫用戶必須有文件所在的路徑的寫權限。

2.若是表存在中文字符,導出至csv文件時須要設置編碼爲GBK,不然使用excel打開是中文顯示亂碼。

3.將文件導入表中時仍要考慮編碼問題

 

示例6.將表拷貝至csv文件中

test=# copy tbl_test1 to '/tmp/tbl_test1.csv' delimiter ',' csv header;
COPY 6

使用excel打開文件,中文顯示爲亂碼

 

示例7. 將表以GBK編碼拷貝至csv文件中

 

test=# copy tbl_test1 to '/tmp/tbl_test1.csv' delimiter ',' csv header encoding 'GBK';
COPY 6

 

使用excel打開,中文顯示正常

 

示例8.將剛纔導出的文件再次拷貝至表中,使用默認編碼UTF8 

test=# copy tbl_test1(a,b,c) from '/tmp/tbl_test1.csv' delimiter ',' csv header;
ERROR:  invalid byte sequence for encoding "UTF8": 0xb9
CONTEXT:  COPY tbl_test1, line 4

 

示例9.將剛纔導出的文件再次拷貝至表中,使用GBK編碼

test=# copy tbl_test1(a,b,c) from '/tmp/tbl_test1.csv' delimiter ',' csv header encoding 'GBK';
COPY 6
相關文章
相關標籤/搜索