Как вставить текстовый файл в поле в PostgreSQL? - PullRequest
1 голос
/ 18 мая 2009

Как вставить текстовый файл в поле в PostgreSQL?

Я хотел бы вставить строку с полями из локального или удаленного текстового файла.

Я бы ожидал такую ​​функцию, как gettext () или geturl (), чтобы сделать следующее:

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

-S.

Ответы [ 4 ]

3 голосов
/ 19 мая 2009

Самый простой способ - использовать один из встраиваемых языков сценариев. Вот пример использования 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-адреса «file: ///» для доступа к локальным файлам, например:

выберите gettext ('file: /// etc / motd');

1 голос
/ 23 мая 2009

Спасибо за советы. Я нашел другой ответ со встроенной функцией. Вы должны иметь права супер пользователя, чтобы выполнить это!

-- 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 голосов
/ 03 февраля 2012

Используйте КОПИРОВАТЬ вместо ВСТАВКИ

ссылка: http://www.commandprompt.com/ppbook/x5504#AEN5631

0 голосов
/ 18 мая 2009

Вы не можете. Вам нужно написать программу, которая будет читать содержимое файла (или URL) и сохранять его в нужном поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...