Я создал свежий дб дамп от производственного сервера с --data-only
и --column-inserts
флагами, так что я только кучу заявлений вставки для вставки данных при выполнении восстановления на промежуточном сервере.
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Как сначала удалить все данные в базе данных промежуточного сервера, прежде чем восстанавливать данные из рабочего дампа?
Я хочу удалить только все данные, чтобы мне не пришлось удалять и создавать базу данных и все такое. Я просто хочу удалить данные и вставить новые данные, вот и все.
У меня нет возможности удалить и создать базу данных по нескольким причинам. Мне придется удалить все данные и просто вставить только, поэтому, чтобы найти способ сделать это, я готов пойти на это, но для начала нужна помощь, очевидно.
Мне также нужно автоматизировать этот процесс. Автоматизирует «сброс данных из производственной базы данных», затем «удаление данных в промежуточной базе данных», а затем «восстановление данных в промежуточную базу данных». Мне просто нужна помощь в части «удаление данных при постановке БД».
Я работаю на PostgreSQL 9.5.2
источник
TRUNCATE table1, table2, ... <list of all tables>;
? они оба делают одно и то же?У pg_restore есть флаг --clean (или, возможно, --create), который автоматически удалит данные перед выполнением операций.
Отличная документация должна вам очень помочь ...
Просто чтобы уточнить, на случай, если это сбивает с толку:
Это не удалит фактическую базу данных ... только таблицы / представления / и т. Д.
Если по какой-то причине удаление и воссоздание таблиц неприемлемо, вам придется приложить больше усилий, чтобы вручную создать сценарий, который создает
data only
дамп из исходной базы данных, проблемTRUNCATE
илиDELETE
в целевой базе данных, а затем загружает дамп данных. Насколько я знаю, нет быстрого / гладкого способа сделать это.источник
Приведенный выше запрос будет генерировать усеченные запросы для всех таблиц в базе данных.
источник
Примечание: мой ответ - действительно удалить таблицы и другие объекты базы данных; для удаления всех данных в таблицах, т. е. усечения всех таблиц , Endre Both предоставил аналогично хорошо выполненный оператор (непосредственное выполнение) месяцем позже.
Для тех случаев , когда вы можете не только
DROP SCHEMA public CASCADE;
,DROP OWNED BY current_user;
или что - то, вот автономный SQL скрипт я написал, что сделка безопасным (т.е. вы можете поместить его междуBEGIN;
и илиROLLBACK;
к просто проверить это илиCOMMIT;
на самом деле делать дело) и очищает «все» объекты базы данных… ну, все те, которые используются в базе данных, которую использует наше приложение, или я мог бы разумно добавить, что:CHECK
,UNIQUE
)VIEW
s (нормальный или материализованный)public
внутренние или DB-внутренние), которыми владеем «мы»: сценарий полезен, когда выполняется как «не суперпользователь базы данных»; суперпользователь может отбросить все схемы (хотя действительно важные из них явно исключены)Не исключены (некоторые преднамеренные; некоторые только потому, что у меня нет примера в нашей БД):
public
схемы (например , для расширения предоставленного материала в них)Это действительно полезно в тех случаях, когда дамп, который вы хотите восстановить, имеет версию схемы базы данных (например, с Debian
dbconfig-common
, Flyway или Liquibase / DB-Manul), отличную от базы данных, в которую вы хотите его восстановить.У меня также есть версия, которая удаляет «все, кроме двух таблиц и того, что им принадлежит» (последовательность, проверенная вручную, извините, я знаю, скучно), если кто-то заинтересован; разница маленькая. Свяжитесь со мной или проверьте этот репо, если вы заинтересованы.
SQL
Протестировано, за исключением более поздних дополнений (
extensions
предоставленных Clément Prévost ), на PostgreSQL 9.6 (jessie-backports
). Удаление агрегатов проверено на 9.6 и 12.2, процедура удаления также проверена на 12.2. Исправления и дальнейшие улучшения приветствуются!источник