PostgreSQL : 스키마 차이 / 패치 도구 [닫기]


14

다음 설정을 고려하십시오.

  • 생산 DB
  • 새로운 기능을 활성화하기 위해 스키마를 변경하는 개발 데이터베이스

새로운 기능의 개발이 완료되면 pg_dump --schema-only두 DB가 동일 할 때까지 prod db 스키마를 수동으로 업데이트해야 합니다. 이 프로세스는 오류가 발생하기 쉽고 지루합니다.

그래서 나는 할 수있는 도구를 찾고 있습니다.

  • 두 스키마 간의 차이점에 대한 요약을 표시합니다 (예 :) diff. 나는 단지 스키마의 단순한 텍스트 차이를 찾고 있지는 않지만 "테이블 X에는 새로운 열이 있다"와 같은 결론을 도출 할 수있는보다 정교한 도구를 찾고있다 Y.
  • (같은 다른 하나의 스키마를 변환 할 SQL 코드를 자동 생성 patch)

제품 스키마를 고급 개발 스키마로 변환하는 데 도움 이되는 스키마 차이 / 패치 도구가 있습니까?


2
diff를 수행하는 대신 마이그레이션 스크립트를 제어 된 방식으로 관리해야합니다. DBMS에 대한 임시 DDL 변경을 수행하지 말고 항상 변경 사항을 스크립트 (버전 제어 시스템에 저장 됨)에 넣은 다음 스크립트를 적용하십시오. Liquibase 또는 Flyway와 같은 도구를 살펴보십시오
a_horse_with_no_name

1
@a_horse_with_no_name 감사합니다. 이 방법으로도 diff / patch 도구를 사용하면 인생을 더 편하게 만들 수 있습니다. BTW, 나는 노래를 윙윙 거리는 것을 도울 수 없다.
Adam Matan

pg_comparator : pgfoundry.org/projects/pg-comparator를 사용해 볼 수 있습니다 (하지만 사용하지는 않았습니다). 즉 더 많은 제어 스키마 관리를위한 좋은 출발점이 될 수 있도록 내가 틀리지 않는 경우 Liquibase가 아니라 DIFF 내장하고 Liquibase의 변경 집합으로 결과를 방출했다
a_horse_with_no_name

감사. 의견을 올리려면 답변으로 게시해야합니까?
Adam Matan

답변:


11

오래된 질문을 부활 시켜서 죄송합니다

최근 에 JetBrains 의 0xDBE DataGrip 데이터베이스 관리 도구를 사용하고 있습니다.

우수한 Jetbrains IDE에서 여러 데이터베이스 엔진을 지원하며, 유용한 주요 기능은 diff2 개의 테이블 (DEV 및 PROD) 기능입니다.

아래는 작동중인 차이의 스크린 샷입니다 (이 경우 단 하나의 열 차이 만 있음). 스크린 샷은 상단에있는 "Merge Right"버튼의 결과이며, 오른쪽 테이블을 처음부터 다시 만드는 데 필요한 SQL을 생성합니다.

0xDBE SQL 테이블 차이

이 새로운 도구가 도움이 되길 바랍니다.


3
오래된 질문을 부활시키는 데 아무런 문제가 없습니다 (그로부터 달성 할 배지가 있습니다). 그리고 질문 : 전체 데이터베이스를 비교할 수 있습니까 (적어도 적어도 모든 테이블을 의미합니까)?
dezso

@dezso-안심 해 주셔서 감사합니다. 예, 데이터베이스, 스키마 및 테이블 수준에서 비교할 수 있습니다.
Ewan

1
@BasilBourque-왼쪽 Database메뉴에서 비교할 2 개의 테이블 (을 사용하여 cmd/ctrl + click)을 선택하고 마우스 오른쪽 단추를 클릭 한 다음Compare
Ewan

3
나는 최근에 파이썬으로 작성된 새로운 도구 인 migra를 발견했습니다 . 테이블, 뷰, 함수, 인덱스, 제약 조건, 열거 형, 시퀀스 및 설치된 확장명에 대한 변경 사항을 추적 할 수 있으며 라이브러리로도 사용할 수 있습니다
스크립트

1
@Ewan 또한 migra는 트리거 및 기능을 포함하여 두 데이터베이스의 모든 항목을 추적합니다. 그러나 DataGrip은 그렇지 않습니다. 그래서 DataGrip을 diff 도구로 사용하지 않는 것이 좋습니다. 단점도 있습니다. 1) migra는 PostgreSQL 도구 일뿐입니다. 2) migra는 변경 사항을 추적하지만 alter table과 같은 적절한 DDL 연산자를 항상 생성하지는 않습니다. alter table 대신 열 추가, drop drop ... 열 이름 바꾸기 등. 나는 도구를 찾지 못했습니다. 올바른 DDL 명령. 그들은 항상 연마가 필요합니다. 또한 Liquibase와 같은 일부 마이그레이션 도구가 없으면 데이터베이스 수정이 너무 복잡합니다.
Exterminator13

6

liquibase를 사용하십시오 .

diff 지원 , 처음부터 DB 생성, DB 패치, DB 롤백 및 기타 여러 가지 기능을 지원합니다.

예전에는 liquibase를 사용하여 XML로 모든 것을 작성해야했지만 더 이상은 아닙니다. 선택한 SQL 언어로 99 %를 쓸 수 있습니다. 예:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;

liquibase changelogs를 git 또는 what-have-you로 유지해야합니다.


이것의 문제는 제약 조건과 기본 키를 올바르게 정렬하거나 제거하지 못한다는 것입니다.
monksy

2
Flyway 는 Liquibase와 비슷한 또 다른 선택입니다.
Basil Bourque
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.