国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-用戶手冊-19. SQL命令-COPY

2019-09-08 23:33:02
字體:
來源:轉載
供稿:網友
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". 一個反斜杠字符輸出成兩個連續的反斜杠("http://")一個tab字符用一個反斜杠后面跟一個tab代表. 一個新行字符用一個反斜杠和一個新行代表.當裝載不是由Postgres 生成的文件時,你需要將反斜杠字符 ("/")轉換成雙反斜杠("http://")以保證正確裝載.?/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 語句.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 平乐县| 安塞县| 华池县| 原平市| 类乌齐县| 垣曲县| 大厂| 堆龙德庆县| 濉溪县| 长子县| 洛扎县| 磴口县| 阜宁县| 淮滨县| 安泽县| 宜州市| 嘉义市| 深泽县| 霞浦县| 大余县| 宁武县| 沛县| 克拉玛依市| 兰溪市| 建德市| 郸城县| 嘉荫县| 南部县| 斗六市| 黄龙县| 岳阳县| 屯留县| 沛县| 崇左市| 恭城| 桓台县| 长宁区| 萍乡市| 闵行区| 深泽县| 商南县|