Temp-таблица дампов PostgreSQL

Я создал временную таблицу в моей базе данных PostgreSQL, используя следующий запрос

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?
Я делаю это правильно?

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

ТИА.

1 ответ

Решение

Я не думаю, что вы сможете использовать pg_dump для этого временного стола. Проблема в том, что временные таблицы существуют только в том сеансе, где они были созданы:

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

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

Тем не мение, COPY должно сработать:

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

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

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

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

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

Другие вопросы по тегам