Я использовал для переключения табличных пространств между установками, пропуская pg_dump через sed
, где я изменил предложение TABLESPACE
.
Вы также можете просто удалить его и дополнительно удалить CREATE TABLESPACE .. из файла дампа любым редактором, и вы можете загрузить его в другой кластер БД.
Я давно перешел на более новые версии, где я могу использовать опцию --no-tablespaces
.
В зависимости от вашей настройки, команда оболочки может выглядеть примерно так в Linux - от всей души, только тестируемый краткий:
pgdump -h 123.456.7.89 -p 5432 mydb \
| sed \
-e' /^CREATE TABLESPACE / d' \
-e 's/ *TABLESPACE .*;/;/' \
-e 's/SET default_tablespace = .*;/SET default_tablespace = '';/'
| psql -p5432 mylocaldb
-e' /^CREATE TABLESPACE / d'
... удалить строки, начинающиеся с "CREATE TABLESPACE".
-e 's/ *TABLESPACE .*;/;/'
... обрезать предложение tablespace (всегда в конце строки в выводе pg_dump) из операторов CREATE TABLE
или CREATE INDEX
.
-e "s/SET default_tablespace = .*;/SET default_tablespace = '';"
.. покончить с любым другим табличным пространством по умолчанию, кроме пустой строки - которое обозначает табличное пространство по умолчанию текущего БД. Обратите внимание на использование двойной кавычки "
, поэтому я могу легко вводить одинарные кавычки '
.
Если вы знаете название используемого табличного пространства, вы можете сузить его. Существует теоретическая возможность, что строка данных может начинаться как один из поисковых терминов. Впрочем, я никогда не сталкивался с проблемами.
Проверьте страницу, подобную этой для получения дополнительной информации о sed
.