Использование COPY FROM STDIN в postgres

14

Я только начал использовать Postgres и пытаюсь создать пример базы данных, чтобы понять его функции, оглядываясь по сторонам, я нашел несколько скриптов в pgfoundry.org. Я понимаю команды, так как ранее я использовал Oracle и MS-SQL, но все скрипты, которые я запускаю, возвращают ошибки, когда достигают инструкции «COPY FROM». Точнее, ошибка выдается на первый элемент, который должен быть вставлен в данную таблицу.

Я пытался запустить сценарии как в виде запросов, так и в виде pgScripts, но в обоих случаях я получаю сообщение об ошибке в первой строке после COPY FROM.

Я использую pgAdminIII, и я использовал StackBuilder для установки PostgreSQL 9.2.4.1 в качестве драйвера БД. Могу ли я пропустить какую-то базовую конфигурацию, которая мешает мне запустить эту команду, или я просто не понял, как она работает?

РЕДАКТИРОВАТЬ:
ошибка:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

где текст:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Эудженио Лаги
источник
1
Добро пожаловать в dba.SE. Вы должны включить (дословно) сообщение об ошибке с таким вопросом. Если ваш языковой стандарт не является английским, вы можете сбросить его в своем сеансе перед запуском сценария, чтобы получить сообщения об ошибках по умолчанию на английском языке: SET lc_messages = Cпросто запустите его в окне редактора SQL, которое «содержит» сеанс.
Эрвин Брандштеттер
Спасибо, я пытаюсь выяснить, как изменить свой язык, я добавлю сообщение об ошибке, как только выясню, как это сделать.
Эудженио Лаги
1
О, я забыл одиночные кавычки: SET lc_messages = 'C'.
Эрвин Брандштеттер,

Ответы:

10

pgScript - это локальное расширение скрипта pgAdmin, которое вам, скорее всего, здесь не нужно.

pgAdmin - это графический интерфейс, а не консольное приложение - stdinвы не можете его легко использовать. Если вам нужно stdinпередать потоковое содержимое, используйте psql, консольное приложение, с \copyмета-командой psql .

Если у вас есть файл (что вы, очевидно, делаете), просто используйте SQL COPYиз pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

Файл должен быть доступен для чтения postgresсистемному пользователю.

Больше информации в этом тесно связанном запросе со списком поддержки pgAdmin .

Эрвин Брандштеттер
источник
ОК, вы имеете в виду , я должен запустить сценарий с линией , как: psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql? Кроме того, я просто все пробую локально, я просто установил pgAdmin на свой ноутбук.
Эудженио Лаги
1
@EugenioLaghi: не совсем. psql -fбудет выполнять файл сценария SQL. Вы, похоже, имеете дело с файлом данных . Я обновил свой ответ.
Эрвин Брандштеттер
БЛАГОДАРНОСТЬ! Сначала я пытался выполнить скрипт, но теперь, по крайней мере, я понял, как копировать данные из файла! Вчера вечером я просто слишком устал, чтобы понять .. :)
Эудженио Лаги
Как вы убедитесь, что пользователь postgres может прочитать файл. Я сделал это для файла TXT, даже для моего рабочего стола (где файл находится), но разрешение по-прежнему отказано.
@Geo: Пожалуйста, начните новый вопрос, включающий версию Postgres, ОС, где находится файл, дословную команду, которую вы использовали, и другие, если уместно ...
Эрвин Брандштеттер,