Не думаю, что вы сможете использовать pg_dump
для этой временной таблицы.Проблема в том, что временные таблицы существуют только в том сеансе, где они были созданы :
Вместо этого PostgreSQL требует, чтобы каждый сеанс выдавал свою собственную команду CREATE TEMPORARY TABLE
для каждой временной таблицы, которая должна бытьиспользуемый.Это позволяет различным сеансам использовать одно и то же временное имя таблицы для разных целей, тогда как подход стандарта ограничивает все экземпляры данного временного имени таблицы одинаковой структурой таблицы.
Таким образом, вы бы создаливременная таблица в одном сеансе, но pg_dump
будет использовать другой сеанс без вашей временной таблицы.
Однако COPY
должно работать:
COPY
перемещает данные между таблицами PostgreSQL и стандартными файлами файловой системы.
, но вы либо будете копировать данные в стандартный вывод или в файл на сервере базы данных (для этого требуетсядоступ суперпользователя):
COPY с именем файла указывает серверу PostgreSQL непосредственно выполнять чтение или запись в файл.Файл должен быть доступен для сервера, а имя должно быть указано с точки зрения сервера.
[...]
Копирование имен файлов разрешено только суперпользователям базы данных, поскольку оно позволяет читать или записывать любые файлы.файл, к которому у сервера есть права доступа.
Таким образом, использование COPY для выгрузки временной таблицы прямо в файл может быть не лучшим вариантом.Вы можете скопировать стандартный вывод, но насколько хорошо это будет работать, зависит от того, как вы обращаетесь к базе данных.
Возможно, вам повезет больше, если вы не используете временные таблицы.Вам, конечно, придется управлять уникальными именами таблиц, чтобы избежать конфликтов с другими сеансами, и вам нужно позаботиться о том, чтобы ваши временные временные таблицы были отброшены, когда вы закончили с ними.