2014-01-20 3 views
0

저는 PostgreSQL에 상당히 익숙하며 PHP에서 사용자 지정 백업 및 복원 스크립트를 만들어야합니다. 여기서 게시물을 읽음으로써, 나는 터미널에 postgres가 시퀀스, 테이블, 뷰 등을 설명하기 위해 사용하는 \ 명령에 대한 sql을 출력 할 psql -E을 알게되었습니다.
SQL을 복제 할 수 있도록 알아낼 수없는 것들 내 작업의 문장은 2 개 이상의 SQL 문을 결합하여 최종 결과를 얻는 방법입니다. 예를 들어 \d mytable은 백업 스크립트 용 CREATE TABLE 스크립트를 만드는 데 사용할 수있는 테이블의 구조를 출력합니다. 그래도 4 개의 쿼리가 필요합니다. 이러한 쿼리를 가져 와서 결합하는 방법이 있습니까?postgresql 내부 쿼리에 대한 설명이 없습니다.

+0

PHP에서'psql -E'를 실행하는 방법,'psql'의 출력을 구문 분석하는 방법,'CREATE TABLE' 문을 생성하는 방법 또는 위의 방법 중 아무 것도 생성하지 않으시겠습니까? –

+0

php 코드에서 사용할 수 있도록'psql -E'가 슬래시 명령 (예 : \ d mytable')에 표시되는 쿼리 집합을 가져 오는 방법을 묻습니다. 2 개 이상의 쿼리를 함께 사용하거나 연결하는 방법에 대한 논리가 있어야합니다. 하위 쿼리가 아닙니다. 그들은 기능을합니까? – dwlamb

답변

1

psql의 정보 쿼리 (\ commands)를 사용하고 싶지 않습니다. 당신이 필요로하는 것은 pg_dump이지, psql이 아닙니다. psql은 테이블이 어떻게 보이는지 사람이 읽을 수있는 뷰를 보여줍니다. pg_dump은 "백업 스크립트"를 만들려고하기 때문에 원하는대로 다시 작성하는 DDL을 제공합니다.

현재 불행히도 pg_dump은 실제로 라이브러리로 호출 할 수 없으며 해당 쿼리를 추출하기가 쉽지 않습니다. 대신 일반적으로 쉘 명령으로 pg_dump을 호출해야합니다.

보기의 경우 SQL 함수 SELECT pg_get_viewdef('view_name')을 사용할 수 있습니다. 불행히도 테이블이나 다른 많은 데이터베이스 객체에는 해당하지 않습니다. system information functions을 참조하십시오.

psql과 마찬가지로 pg_dump은 일련의 쿼리를 사용하여 주어진 명령에 대한 SQL 텍스트를 구성 할 수 있습니다. pg_dumpsource code for pg_dump에서 어떻게 구성되는지, 특히 괴물 인 pg_dump.c에서 찾을 수 있습니다. dumpTable() for instance을 참조하십시오.

어떻게하면 pg_dump을 복사하려고하면 스스로 유지 관리 악몽을 만들게됩니다. PostgreSQL 카탈로그는 psqlpg_dumpinformation_schema과 같은 도구에서 일반적으로 변경 사항으로부터 사용자를 보호하므로 버전마다 안정적입니다. 카탈로그를 탐색하다 보면 메이저 버전이 출시 될 때마다 다시 테스트해야하며 이전 버전과의 호환성을 처리해야합니다. pg_dump의 버전 별 사례를 살펴보고 자신이 무엇을 얻고 있는지 아이디어를 얻으십시오.

pg_dump의 핵심 기능이 libpqdump이거나 서버 측 확장에 있어야한다고 생각하지만 불행히도 그렇지 않으며 아무도 만들 수없는 많은 양의 작업을 기꺼이 수행해야합니다. 가능한.

짧은 버전 : 그냥 pg_dump을 사용하십시오. 필요할 경우 -t과 같은 선택적 덤프 옵션을 지원합니다.

+1

+1 그는 OP를 원한다고해도 이것이 OP가 원하는 것임을 확신합니다. 이것은 고전적인 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) IMHO입니다. –

+0

@ ÁlvaroG.Vicario 허, 나는 그 착오가 이름을 가지고 있다는 것을 몰랐다. 저는 보통 "(왜 귀찮아 질 수 있습니다)" "왜 * * * 어떻게 설명할까요?"라는 기본 질문을 당신이 해결하려고하는 것이 아니라 어떻게 해결해야한다고 생각 하는지를 설명 해주십시오." –

+0

@CraigRinger .pg_dump를 사용하는 경우 옵션을 사용하면 브라우저를 통해 데이터베이스를 조작하기 위해 자체 스크립트를 작성하고 백업 스크립트를 복원하지 않을 것입니다. 프로덕션/호스팅에 사용하는 ISP는 매우 제한적인 인터페이스를 가지고 있습니다. 오직 PhpPgAdmin .pg_dump를 사용하는 것은 괜찮습니다.하지만 개발 및 확장을 위해 스위치와 옵션을 검토 한 결과, 편집을 많이해야하는 덤프 파일이 생성되어 PhpPgAdmin 쿼리 텍스트 영역에 쉽게 붙여 넣기가 가능합니다. CREATE TABLE 문을 사용하여 다시 빌드 할 요소를 쿼리하는 메서드 – dwlamb

관련 문제