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

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

1 голос
/ 14 декабря 2011

Я создал временную таблицу в моей базе данных 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?
Я делаю это правильно?

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

ТИА.

1 Ответ

4 голосов
/ 14 декабря 2011

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

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

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

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

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

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

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

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

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

...