3

テキストファイルをPostgreSQLのフィールドに挿入するには?

ローカルまたはリモートのテキスト ファイルからフィールドを含む行を挿入したいと考えています。

次のことを行うには、 gettext() や geturl() などの関数が必要です。

% INSERT INTO collection(id, path, content) VALUES(1, '/etc/motd', gettext('/etc/motd'));

-S.

4

5 に答える 5

4

最も簡単な方法は、組み込み可能なスクリプト言語の 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');

于 2009-05-19T01:51:49.897 に答える
2

ヒントをありがとう。関数が組み込まれた別の答えを見つけました。それを実行するには、スーパー ユーザー権限が必要です。

-- 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'));
于 2009-05-22T23:10:25.713 に答える
0

INSERT の代わりに COPY を使用する

参照: http://www.commandprompt.com/ppbook/x5504#AEN5631

于 2012-02-03T02:39:56.697 に答える
0

できません。ファイルの内容 (または URL) を読み取り、それを目的のフィールドに格納するプログラムを作成する必要があります。

于 2009-05-18T19:48:05.230 に答える