2017-04-15 49 views
1

我有一個產生的zip文件的程序,我在一個目錄暫時保存這些是這樣的:Postgres的複製命令來壓縮文件加載到數據庫

1.zip 
    2.zip 
    3.zip 
    ... 

我做了一個PHP程序加載每個文件的成Postgres數據庫,但我需要做此用命令Postgres的「複製」(因爲可能更快)

我搜索,但我無法找到答案

所以我的表是這樣的:

CREATE TABLE files (
    id int, 
    file bytea, 
    primary key (id)); 

所以每個文件名是「ID」列和每一個zip文件將在「文件」字段

所以,我怎麼能做到這一點與複製命令?

謝謝大家!

+1

?有一個數據庫的名稱是爲了存儲文件而顯式創建的......一個「文件系統」。 –

+0

@EvanCarroll我怎樣才能做文件系統? – 1pa

回答

0

COPY ... WITH BINARY對支持的二進制格式有一些限制,我不確定它是否適用於zip文件。如果你打開INSERT,我會建議使用pg_read_file,如:

INSERT INTO files VALUES 
(1, pg_read_file('/path/to/1.zip')::bytea), 
(2, pg_read_file('/path/to/2.zip')::bytea), 
... 
; 
這是一個可怕的想法,你爲什麼會想zip文件存儲在數據庫中
+0

謝謝,但我的問題是,我有200萬個文件,所以我怎麼能做得更快? – 1pa

+0

,我得到這個錯誤錯誤:無法stat文件「1.zip」:沒有這樣的文件或目錄 – 1pa

+0

鑑於您可能應該探索使用COPY ... WITH BINARY'然後。更好的是,如果可能的話,只將文件路徑存儲在表中,在這種情況下它將是一個簡單的「COPY」。對於'pg_read_file',它是一個服務器端的管理函數,所以你需要以PostgreSQL管理員用戶的身份運行,並且目標文件需要駐留在'data_directory'下。他們也可以通過'data_directory'中的符號鏈接駐留在其他地方(儘管如此,請注意潛在的安全風險)。 –