Використання КОПІЇ З STDIN в постгресах


14

Я щойно почав використовувати Postgres і намагаюся створити зразок db, щоб зрозуміти його функції, оглянувшись, я знайшов деякі сценарії на pgfoundry.org. Я розумію команди, оскільки раніше я використовував і Oracle, і MS-SQL, але всі сценарії, у яких я виконую помилки повернення, коли вони досягають інструкції "КОПІРУВАННЯ ВІД". Точніше, помилка кидається на перший елемент, який слід вставити в дану таблицю.

Я намагався запускати сценарії як у запитах, так і як pgScripts, але в обох напрямках я отримую помилку в першому рядку після COPY FROM.

Я використовую pgAdminIII, і я використовував StackBuilder для встановлення PostgreSQL 9.2.4.1 як драйвер БД. Чи можу я пропустити якусь базову конфігурацію, яка заважає мені виконувати цю команду, або я просто не зрозумів, як вона працює?

EDIT:
Помилка:

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. Ви потрібно включити (дослівно) messsage помилки з питанням , як це. Якщо ваша мова не є англійською мовою, ви можете скинути її в сеанс, перш ніж запустити скрипт, щоб отримати англійські повідомлення про помилки за замовчуванням: 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 на своєму ноутбуці.
Eugenio Laghi

1
@EugenioLaghi: Не зовсім так. psql -fбуде виконувати файл сценарію SQL. Ви, здається, маєте справу з файлом даних . Я оновив свою відповідь.
Ервін Брандстеттер

СПАСИБІ! На початку я намагався виконати сценарій, але, принаймні, я зрозумів, як КОПУВАТИ дані з файлу! Вчора ввечері я просто надто втомився, щоб зрозуміти .. :)
Євгеніо Лагі

Як ви переконаєтесь, що користувач postgres зможе прочитати файл. Я зробив це для файлу txt, навіть для мого робочого столу (де файл знаходиться), але в дозволі все одно відмовлено.

@Geo: Будь ласка, почніть нове запитання, включаючи версію Postgres, ОС, де лежить файл, дослівну команду, яку ви використовували, та інше, якщо це доречно ...
Erwin Brandstetter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.