GB | BIG5
|
| 首頁 > 數據庫 > 其它 > 正文 |
 |
| PostgreSQL7.0手冊-用戶手冊-19. SQL命令-COPY |
| 編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 21:44:57) |
COPY
拷貝
COPY 在表和文件之間拷貝數據
語法
COPY [ BINARY ] table [ WITH OIDS ]
FROM { 'filename' | stdin }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ]
COPY [ BINARY ] table [ WITH OIDS ]
TO { 'filename' | stdout }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ]
輸入
BINARY
改變字段格式屬性,強制所有數據都使用二進制格式存儲和讀取.
table
現存表的名字.
WITH OIDS
拷貝每行的內部唯一對象標識(OID).
filename
輸入或輸出的Unix文件的絕對路徑(文件)名.
stdin
聲明輸入是來自管道還是終端.
stdout
聲明輸出是進入管道還是終端.
delimiter
一個用分隔輸入或輸出的域的分隔符.
null print
一個代表 NULL 值的字串。因歷史原因,缺省是“\N”(反斜槓-N)。例如,你可以自己挑一個空字串。
注意:對拷貝入(copy in),任何匹配這個字串的字串將被存儲為 NULL 值,所以你應該確保你用的字串和拷貝出(copy out)相同。
輸出
COPY
拷貝成功完成.
ERROR: reason
拷貝失敗,原因在錯誤信息裡.
描述
COPY 在 Postgres 表和標準 Unix 文件之間交換數據.COPY 指示 Postgres 端直接從文件中讀寫數據.該文件必須為端可見,而且文件名必須從端的角度聲明.如果聲明的是 stdin 或 stdout,數據通過客戶前端流到端.
注意
BINARY 關鍵字將強制使用二進制對象而不是文本存儲/讀取所有數據.這樣做在一定程度上比傳統的拷貝命令快,但移植性不是很好,而且生成的文件也較大,盡管這個方面與數據本身密切相關.
缺省地,文本拷貝使用 tab ("\t")字符作為分隔符.分隔符仍然可以用關鍵字 USING DELIMITERS 改成任何其它的字符.在數據中碰巧與分隔符相同的字符將用引號引起.
你對任何要 COPY 出來的數據必須有select權限,對任何要 COPY 入數據的表必須有inser和update權限.使用 COPY 時端同樣需要適當的對文件操作的 Unix 權限.
關鍵字 USING DELIMITERS 聲明一個作為所有列的分隔符的字符.如果在分隔符字串裡聲明了多個字符,只使用第一個字符.
小技巧: 不要把 COPY 和 psql 的命令\copy 混淆.
COPY 不會激活規則,也不會處理字段缺省值。不過它的確激活觸發器。
COPY 在第一個錯誤處停下來.這些在 COPY FROM 中不應該導致問題,但在 COPY TO 時目的表會部分改變.應該在一次失敗的拷貝用 VACUUM 查詢做一些清除工作.
因為 Postgres 端的工作目錄通常和用戶的工作目錄不一樣,本地用戶向一個文件"foo"(沒有附加的路徑信息)可能會產生不可預見的結果.這時,foo 將生成在 $PGDATA/foo. 通常,聲明拷貝文件時要加上相對端服務器的全路徑.
作為 COPY 參數聲明的文件名必須存在與數據庫服務器可訪問的地方,不管是在本地硬盤還是在網絡文件系統上.
如果使用了一個從一台機器到另一台機器的 TCP/IP 連接,而且聲明了目標文件,那目標文件將會寫到端運行的機器上,而不是用戶的機器上.
文件格式
文本格式
當不帶 BINARY 選項使用 COPY TO 時,生成的文件每條記錄佔據一行,每列(字段)用分隔符分開.內嵌的分隔符字符將由一個反斜槓("\")開頭.字段值本身是由與每個字段類型相關的輸出函數生成的字符串.某一類型的輸出函數本身不應該生成反斜槓;這個任務由 COPY 本身完成.
每個記錄的實際格式是
...
如果聲明了 WITH OIDST,它將被放在每行的開頭.
如果 COPY 將它的輸出輸出到標準輸出而不是一個文件,在拷貝結束時,它將在一個新行上輸出一個反斜槓("\")和一個句點("."),最是一個換行符做為文件結束符.類似,如果 COPY 從標準輸入讀入數據,它將把一行開頭的由一個反斜槓("\")和一個句點(".")和一個換行符組成的這三個連續字符作為文件結束符.不過,如果在這三個字符組合之前碰到一個真的EOF(文件結束符) COPY 將結束 terminate (接著就是端自身).
斜槓有其他的含義.NULL屬性輸出為"\N". 一個反斜槓字符輸出成兩個連續的反斜槓("\\")一個tab字符用一個反斜槓面跟一個tab代表. 一個新行字符用一個反斜槓和一個新行代表.當裝載不是由Postgres 生成的文件時,你需要將反斜槓字符 ("\")轉換成雙反斜槓("\\")以保証正確裝載.?/div>
二進制格式
當使用 COPY BINARY,文件的頭四個字節將是文件中記錄的個數.如果數值是零, COPY BINARY 命令將一直讀到文件尾.否則,它將在達到個數時停止讀取.文件中剩余的數據將被忽略.
文件中每一實例的格式如下表.要注意本格式一定要 完全 符合.無符號的四字節整數數量在下表中稱做 uint32 .
表 19-1. 二進制拷貝文件的內容
文件開始
uint32 記錄個數
每條記錄
uint32 記錄數據總長
uint32 oid (如果聲明了)
uint32 null 字段的個數
[uint32,...,uint32] 字段個數(attribute numbers of attributes), 從0開始
- <字段數據>
二進制數據的對齊
在Sun-3s,2-字節字段以2-字節為界對齊,而所有整數字段以4-字節為界對齊.字符字段以1-字節為界對齊.在大部分其他機器上,所有大1字節的整數是按照4-字節為邊界對齊的.注意,變長字段由字段長度在埃皇櫓皇羌虻氖樵乩嘈偷牧鰨?/div>
用法
下面的例子將一個表拷貝到標準輸出,使用豎直條("|")作為域分隔符:
COPY country TO stdout USING DELIMITERS '|';
從一個 Unix 文件中拷貝數據到表 "country":
COPY country FROM '/usr1/proj/bray/sql/country_data';
這裡是一些可以從標準輸入 stdin 輸入的數據的例子(所以在最有結束符):
AF AFGHANISTAN
AL ALBANIA
DZ ALGERIA
...
ZM ZAMBIA
ZW ZIMBABWE
\.
同樣的數據,輸出到一個Linux/i586機器的二進制文件中去.數據是用 Unix 應用 od -c 顯示的.表裡有三個域;第一個是char(2) 第二個是 text.所有記錄在第三字段有空(null)值.注意 char(2) 字段是如何用空(null)補齊成四個字節的以及text字段是如何前面補長度的:
355 \0 \0 \0 027 \0 \0 \0 001 \0 \0 \0 002 \0 \0 \0
006 \0 \0 \0 A F \0 \0 017 \0 \0 \0 A F G H
A N I S T A N 023 \0 \0 \0 001 \0 \0 \0 002
\0 \0 \0 006 \0 \0 \0 A L \0 \0 \v \0 \0 \0 A
L B A N I A 023 \0 \0 \0 001 \0 \0 \0 002 \0
\0 \0 006 \0 \0 \0 D Z \0 \0 \v \0 \0 \0 A L
G E R I A
... \n \0 \0 \0 Z A M B I A 024 \0
\0 \0 001 \0 \0 \0 002 \0 \0 \0 006 \0 \0 \0 Z W
\0 \0 \f \0 \0 \0 Z I M B A B W E
兼容性
SQL92
在SQL92裡沒有 COPY 語句.
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-VACUUM (2001-04-21 22:16:33) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UPDATE (2001-04-21 22:16:12) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UNLISTEN (2001-04-21 22:15:44) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-TRUNCATE (2001-04-21 22:15:24) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SHOW (2001-04-21 22:15:01) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SET (2001-04-21 22:14:42) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT INTO (2001-04-21 22:14:19) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT (2001-04-21 22:14:01) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-ROLLBACK (2001-04-21 22:13:41) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-REVOKE (2001-04-21 22:13:18)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |