2013-11-30 2 views
1

Я запускаю экземпляр EC2 (AMAZON LINUX X64, работающий с Postgresql), и вам нужно взять файл из EC2 и загрузить его в DB Postgresql, работающий на RDS. Я не уверен, как это сделать, неужели кто-то имеет опыт? Или кто-то может мне точку в инструкции, официальный документ, и т.д ..Как загрузить данные из экземпляра EC2 Linux в Postgresql RDS

Заранее спасибо ..

+0

Обычно вы пишете скрипт, который читает файл, и разговаривает с Postgres. Вы можете использовать, например. Python. В этом случае вы должны использовать 'open', чтобы открыть файл, и, возможно, модуль' csv', если ваш файл CSV. Затем вы будете использовать модуль 'psycopg', чтобы поговорить с Postgres. –

+0

В каком формате находится файл, который вы загружаете? – datasage

+0

Amazon на помощь! http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html – nrathaus

ответ

1

Лучше поздно, чем никогда :-)

Я обнаружил, что, безусловно, самый простой способ сделать это загрузить данные с веб-сервера или файла на основе конечной точки с помощью «COPY FROM» команды

Postgres manual for copy

Практический пример

Предположим, у вас есть следующие CSV данные:

1,Fred,Flintstone 
2,Barney,Rubble 
3,Willma,Flintstone 
4,Betty,Rubble 

С столбцам соответственно являющихся pkid, Firstname и фамилия

Если создать этот файл на веб-сервере (возможно, сервер ваш работает локально, но можно получить снаружи), затем вы можете ввести:

http://myserver.blah/flintstones.csv 

в ваш браузер и увидеть файл.

Как только вы в состоянии сделать это и предположим, что используемый вами сервер является открытым (так, чтобы серверы амазонок могли его видеть), вам необходимо запустить такой инструмент, как PGAdmin или что-нибудь еще, что позволит вам запустите sql при установке postgres.

Как вы управляете этими командами, это вопрос для обсуждения, я использовал все методы в прошлом.

Хорошо работает в том, чтобы настроить учетную запись ssh на вашем узле устройства Amazon, а затем использовать SSH-клиент, который позволяет туннелировать с вашего локального узла на экземпляр RDS, делая это таким образом, чтобы вы могли использовать такие программы как PGAdmin.

Если вы не можете использовать туннель, вы всегда можете взломать быстрый скрипт ruby ​​/ php/nodejs, который позволит вам выполнить 2 команды sql, которые вам нужны.

После того, как у вас есть возможность запускать команды SQL против экземпляра RDS, что вам нужно сделать 2 вещи:

  • 1) Создать таблицу назначения
  • 2) Используйте команду копирования, чтобы импортировать данные

Создание таблицы назначения легко, это просто простая команда create table.

Для нашего примера:

CREATE TABLE theflintstones 
(
    pkid integer primary key, 
    firstname text, 
    surname text 
) 

Вторая команда немного сложнее

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

В моем прошлом опыте, однако, я не могу вспомнить, когда-либо получал доступ к прямой файловой системе на экземпляре RDS, поэтому вам очень нравится использовать удаленный метод http.

Проблема с использованием метода http заключается в том, что экземпляр rds может не иметь установленного инструмента wget или curl.

На практике мне еще предстоит встретить тот, у которого не установлено, по крайней мере, wget, так как wget довольно часто требуется базовой ОС, чтобы захватить нужные вещи из Интернета. Часто завиток также установлен.

когда вы готовы импортировать данные, то вам необходимо использовать следующую команду:

COPY theflintstones FROM PROGRAM 'curl -s http://myserver/flintstones.csv' WITH(format csv) 

Где MyServer 'должен быть заменен на веб или IP-адрес, где хранятся данные файла CSV, и «flintstones.csv» следует заменить на фактическое имя файла, которое вы хотите загрузить.

«локон -s [URL]» используется для запуска завиток в автоматическом режиме, если вы должны использовать Wget, то вы должны указать программу, как «Wget -qO- [URL]» вместо

Если все пойдет хорошо, postgres должен загрузить CSV из удаленного источника, а затем использовать содержимое этого файла для заполнения столбцов в вашей таблице.

Если вам нужно всего лишь заполнить несколько столбцов в таблице, а затем использовать таблицы и столбец синтаксис:

COPY table(column, column, column ...) 

и CSV будет только заполнить те столбцы, которые называются настройки остальных значений по умолчанию.

Смежные вопросы