テキストファイルをPostgreSQLのフィールドに挿入するには?
ローカルまたはリモートのテキスト ファイルからフィールドを含む行を挿入したいと考えています。
次のことを行うには、 gettext() や geturl() などの関数が必要です。
% INSERT INTO collection(id, path, content) VALUES(1, '/etc/motd', gettext('/etc/motd'));
-S.
テキストファイルをPostgreSQLのフィールドに挿入するには?
ローカルまたはリモートのテキスト ファイルからフィールドを含む行を挿入したいと考えています。
次のことを行うには、 gettext() や geturl() などの関数が必要です。
% INSERT INTO collection(id, path, content) VALUES(1, '/etc/motd', gettext('/etc/motd'));
-S.
最も簡単な方法は、組み込み可能なスクリプト言語の 1 つを使用することです。plpythonu を使用した例を次に示します。
CREATE FUNCTION gettext(url TEXT) RETURNS TEXT AS $$ urllib2 をインポート 試す: f = urllib2.urlopen(URL) return ''.join(f.readlines()) 例外を除く: 戻る "" $$ LANGUAGE plpythonu;
このサンプル関数の欠点の 1 つは、urllib2 に依存しているため、ローカル ファイルにアクセスするには、次のように「file:///」URL を使用する必要があることです。
select gettext('file:///etc/motd');
ヒントをありがとう。関数が組み込まれた別の答えを見つけました。それを実行するには、スーパー ユーザー権限が必要です。
-- 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'));
INSERT の代わりに COPY を使用する
できません。ファイルの内容 (または URL) を読み取り、それを目的のフィールドに格納するプログラムを作成する必要があります。