Как сделать pg_dump пропустить расширение?

Это на 9.3, но я могу вспомнить то же самое, что происходит с 7.x. Поэтому я создаю базу данных и устанавливаю в нее расширение plpgsql. Позже я создаю pg_dump и, прежде чем восстанавливать его в databse, я уверен, что он также имеет расширение plpgsql. Затем при восстановлении это происходит:

pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

Я создаю кучу скриптов, и для меня очень важно, что pg_restore возвращает 0, поэтому тот факт, что я могу просто проигнорировать это, не приносит пользы. Что меня озадачивает, так это то, что IIRC мне нужно создать расширение как основного пользователя postgres, поэтому я понятия не имею, почему все это EXTENSION-материал заканчивается на моей дампе. В конце концов, я не являюсь владельцем языка /расширения?

В любом случае, я был бы благодарен за любое предложение, как избавиться от этого. Обратите внимание, что я знаю, как работают переключатели -l /-L. Это, однако, похоже, слишком много усилий, чтобы исправить только один простой комментарий к расширению.

10 голосов | спросил Jacek Prucia 10 WedEurope/Moscow2014-12-10T16:20:53+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 16:20:53 +0300 2014, 16:20:53

3 ответа


5

Для тех, кто ищет обходной путь, ограничение pg_restore на определенную схему помогло мне обойти эту ошибку. См. https://stackoverflow.com/a/11776053/11819

ответил nfelger 25 FebruaryEurope/MoscowbWed, 25 Feb 2015 17:16:21 +0300000000pmWed, 25 Feb 2015 17:16:21 +030015 2015, 17:16:21
3

Вы можете сделать

pg_dump ... | grep -v -E '^(CREATE\ EXTENSION|COMMENT\ ON)' >out.sql

это то, что я использую для импорта в облако Google Cloud с postgres.

edit: добавлен «старт строки», чтобы не исключать строки, содержащие этот литерал.

ответил Rene 2 +03002017-10-02T14:16:45+03:00312017bEurope/MoscowMon, 02 Oct 2017 14:16:45 +0300 2017, 14:16:45
0

Чтобы экспортировать только схему без каких-либо других объектов базы данных, вы можете указать имя схемы с помощью параметра --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
ответил Mauricio Sánchez 12 AM00000010000001431 2018, 01:41:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132