所以,這裏的情況是:使用OID在PostgreSQL上(不讀從FS文件)複製命令
我有一個客戶端上傳一個CSV到我的申請,使用OID將它保存在一個表,然後處理數據我從CSV創建一個臨時表,並分發我想要的數據到另一個表,它工作得很好。但我真的不想在每次我想要處理文件系統時首先將csv保存在文件系統中,有任何方法可以使用db中的文件將COPY命令運行到表中?我想要的是這樣的:
COPY temp_table FROM loread(lo_open((SELECT csv_file_oid FROM files_table WHERE liberacao_base_id = 104), 262144), 1000000) WITH DELIMITER ; CSV HEADER;
這是一種方法來做這樣的事情嗎?我真的必須將文件保存在文件系統上才能運行COPY命令?如果我已經在我的數據庫中擁有它,那麼對我來說似乎有很多資源浪費。提前致謝(對不起,我的英語不好)
它是Web應用程序?如果是這樣的話,那麼文件很可能已經保存在文件系統中,無論如何在一些臨時目錄(這是上傳的工作方式)。如果沒有,那麼你可以在'COPY'命令中使用'STDIN'而不是文件([PostgreSQL 9.5.1 Documentation:COPY](http://www.postgresql.org/docs/current/static/sql-copy.html) )。 –
是的,它是一個Web應用程序,但沒有保存在文件系統上,它被保存到引用postgres表上的二進制字段的OID中。這不是上傳工作的方式,客戶端將二進制數據傳遞給服務器,以它想要的方式處理它,您可以保存在FS上或將bytearraystream保存在內存中,並將其保存在數據庫上,如我的webapp,例如我的應用程序不允許將任何東西保存在FS上作爲公司策略。 – Hllink