pg_dump 건너 뛰기 확장을 만드는 방법?


16

이것은 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 스위치의 작동 방식을 알고 있습니다. 그러나 이것은 하나의 간단한 확장 주석을 수정하는 데 너무 많은 노력으로 보입니다.


3
FWIW, 이것은 작년에보고되었으며 버그 # 8695 로 논의되었습니다 .
Daniel Vérité

답변:



5

넌 할 수있어

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

postgres를 사용하여 Google 클라우드 SQL로 가져 오는 데 사용합니다.

편집 :이 리터럴 텍스트가 포함 된 행을 제외하지 않도록 '행 시작'캐럿을 추가했습니다.


2
그러면 해당 텍스트가 포함 된 레코드가 제거되지 않을 수 있지만 스냅 샷 끝에 추가 될 때 제한 조건이 누락 된 손상된 스키마가 있습니다. 나는 앞에 거라고 "-"대신에 제거하고, 또한 DROP 케이스를 고려 pg_dump | sed 's/DROP EXTENSION/-- DROP EXTENSION/g' | sed 's/CREATE EXTENSION/-- CREATE EXTENSION/g' | sed 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g'
엘비스시오 티 (Ciotti)을

2

-L사용자 정의 파일 형식으로 덤프 한 후 pg_restore와 함께 플래그를 사용하십시오 .

-L-사용 목록 =list-file
list-file

에 나열된 아카이브 요소 만 list-file복원하고 파일에 나타나는 순서대로 복원하십시오. 필터링 같은 경우 전환하는 것으로 -n또는 -t함께 사용되는 -L, 그들은 상기 복원 된 항목을 제한하는 것이다.

list-file일반적으로 이전 -l작업 의 출력을 편집하여 생성됩니다 . 줄을 이동하거나 제거 할 수 있으며 줄 ;의 시작 부분에 세미콜론 ( )을 넣어 주석을 달 수도 있습니다 . [...]

참조 : pg_restore (PostgreSQL 설명서 9.3)

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep -v 'COMMENT - EXTENSION' | \
    grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump

여기에서 이 참됨을 알 수 있습니다 .

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep 'COMMENT - EXTENSION' | grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.4.15
-- Dumped by pg_dump version 9.5.14

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- PostgreSQL database dump complete
--

DBA.SE에 오신 것을 환영합니다. 귀하의 기여에 감사드립니다. 원래 질문은 PostgreSQL 버전 9.3에 관한 것이지만 원래 답변은 9.5를 참조했습니다. 버전. 나는 그것을 반영하기 위해 귀하의 답변을 약간 수정했습니다. 그러나 출력의 일부는 버전에 따라 다를 수 있으며 버전 9.3에서 다를 수 있습니다.
John 일명 hot2use 8

0

데이터베이스의 다른 객체없이 스키마 만 내보내려면 매개 변수를 사용하여 스키마 이름을 지정할 수 있습니다. --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.