2011-12-14 3 views
1

Я создал таблицу с Темп в моей PostgreSQL БД с помощью следующего запросаPostgreSQL таблица свалка Temp

SELECT * INTO TEMP TABLE tempdata FROM data WHERE id=2004; 

Теперь я хочу, чтобы создать резервную копию этого временную таблицу tempdata.
Так я использую следующую команду выполнения строки

"C:\Program Files\PostgreSQL\9.0\bin\pg_dump.exe" -F t -a -U my_admin -t tempdata myDB >"e:\mydump.backup" 

я получаю сообщение о том,

pg_dump: No matching tables were found 

Можно ли создать дамп temp tables?
Я делаю это правильно?

P.S. : Я также хотел бы восстановить то же. Я не хочу использовать какие-либо дополнительные компоненты.

TIA.

+0

Это поможет, если вы могли бы дать некоторый опыт тому, чего вы пытаетесь достичь. Что вы загружаете в эти временные таблицы? Зачем pg_dump их? Кроме того, как вы ожидаете восстановить временную таблицу - какой результат вы ожидаете, учитывая, что временные таблицы являются * временными * и уходят в конце сеанса? Восстановление временной таблицы не повлияет, даже если вы сможете это сделать. –

+0

@CraigRinger Я пытаюсь сделать что-то вроде [this] (http://stackoverflow.com/questions/8489464/postgresql-dump-restore) Поскольку мои данные разбросаны по нескольким таблицам, я хочу взять резервную копию только некоторые конкретные данные из всех таблиц и дамп в файле резервной копии. Я хочу восстановить эти данные в другой системе, которая может/не иметь этих данных. – Shirish11

+0

@CraigRinger Я реализовал это с использованием нетемпературных таблиц, но решение не так эффективно. – Shirish11

ответ

4

Я не думаю, что вы сможете использовать pg_dump для этой временной таблицы. Проблема заключается в том, что temporary tables only exist within the session where they were created:

PostgreSQL вместо требует от каждой сессии выпустить свою собственную CREATE TEMPORARY TABLE команды для каждой временной таблицы, которые будут использоваться. Это позволяет различным сеансам использовать одно и то же имя временной таблицы для разных целей, тогда как подход стандарта ограничивает все экземпляры данного временного имени таблицы одинаковой структурой таблицы.

Таким образом, вы должны создать временную таблицу за один сеанс, но pg_dump будет использовать другой сеанс, который не имеет вашей временной таблицы.

Однако COPY должно работать:

COPY перемещает данные между таблицами PostgreSQL и стандартных файлов системных файлов.

но вы либо скопировать данные на стандартный вывод или файл на сервере базы данных (который требует доступ суперпользователя):

COPY с именем файла указывает серверу PostgreSQL напрямую читать или записывать в файл. Файл должен быть доступен для сервера, и имя должно быть указано с точки зрения сервера.
[...]
КОПИРОВАНИЕ Именование файла разрешено только для суперпользователей базы данных, поскольку оно позволяет читать или записывать любые файлы, на которые у сервера есть права доступа.

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

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

+0

Я не могу использовать 'COPY', так как для создания резервной копии существует более 1 таблицы. Есть и другие предложения? – Shirish11

+0

@ Shirish11: КОПИРОВАТЬ их по одному или не использовать временные таблицы. Если вам не нужно беспокоиться о уникальности (т. Е. Вы можете гарантировать, что только один сеанс должен будет записываться в ваши «временные» таблицы за раз, тогда вы можете использовать таблицы без temp и 'pg_dump'. –

+0

Использовали эту но его не очень эффективный. Все ошибки, в то время как выполнение приведет к тому, что я потеряю все свои данные. (Является ли это тем, что если я использую тот же сеанс для создания своих «временных таблиц» и использую 'pg_dump', это будет тренировка?) – Shirish11

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