2009-05-18 68 views
1

如何在PostgreSQL的字段中插入文本文件?如何在PostgreSQL的字段中插入文本文件?

我想從本地或遠程文本文件中插入一行字段。

我預計,爲了做到以下類似的gettext)函數(或使用getURL():

%INSERT INTO集合(ID,路徑,內容)VALUES(1, '在/ etc/MOTD' ,gettext('/ etc/motd'));

-S。

回答

1

感謝您的提示。我發現了另一個內置函數的答案。 您需要擁有超級用戶權限才能執行該操作!而不是

-- 1. Create a function to load a doc 
-- DROP FUNCTION get_text_document(CHARACTER VARYING); 
CREATE OR REPLACE FUNCTION get_text_document(p_filename CHARACTER VARYING) 
    RETURNS TEXT AS $$ 
    -- Set the end read to some big number because we are too lazy to grab the length 
    -- and it will cut of at the EOF anyway 
    SELECT CAST(pg_read_file(E'mydocuments/' || $1 ,0, 100000000) AS TEXT); 
$$ LANGUAGE sql VOLATILE SECURITY DEFINER; 
ALTER FUNCTION get_text_document(CHARACTER VARYING) OWNER TO postgres; 

-- 2. Determine the location of your cluster by running as super user: 
SELECT name, setting FROM pg_settings WHERE name='data_directory'; 

-- 3. Copy the files you want to import into <data_directory>/mydocuments/ 
-- and test it: 
SELECT get_text_document('file1.txt'); 

-- 4. Now do the import (HINT: File must be UTF-8) 
INSERT INTO mytable(file, content) 
    VALUES ('file1.txt', get_text_document('file1.txt')); 
0

你不能。您需要編寫一個程序來讀取文件內容(或URL)並將其存儲到所需的字段中。

3

最簡單的方法是使用其中一種可嵌入的腳本語言。下面是使用plpythonu一個例子:

 
CREATE FUNCTION gettext(url TEXT) RETURNS TEXT 
AS $$ 
import urllib2 
try: 
    f = urllib2.urlopen(url) 
    return ''.join(f.readlines()) 
except Exception: 
    return "" 
$$ LANGUAGE plpythonu; 

一個缺點,以這個例子功能是其對urllib2的依賴,意味着你必須用「文件:///」的URL訪問本地文件,如:

選擇gettext的( '文件:///等/ MOTD');

+0

它要求超級用戶能創建此功能。更好地使用客戶端功能。 – bortzmeyer 2009-05-29 11:27:30

+0

我在原始問題中看不到任何東西,導致我相信他不是。 – TML 2009-05-31 03:17:25

相關問題