저는 PostgreSQL에 상당히 익숙하며 PHP에서 사용자 지정 백업 및 복원 스크립트를 만들어야합니다. 여기서 게시물을 읽음으로써, 나는 터미널에 postgres가 시퀀스, 테이블, 뷰 등을 설명하기 위해 사용하는 \ 명령에 대한 sql을 출력 할 psql -E
을 알게되었습니다.
SQL을 복제 할 수 있도록 알아낼 수없는 것들 내 작업의 문장은 2 개 이상의 SQL 문을 결합하여 최종 결과를 얻는 방법입니다. 예를 들어 \d mytable
은 백업 스크립트 용 CREATE TABLE 스크립트를 만드는 데 사용할 수있는 테이블의 구조를 출력합니다. 그래도 4 개의 쿼리가 필요합니다. 이러한 쿼리를 가져 와서 결합하는 방법이 있습니까?postgresql 내부 쿼리에 대한 설명이 없습니다.
답변
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_dump
이 source code for pg_dump
에서 어떻게 구성되는지, 특히 괴물 인 pg_dump.c
에서 찾을 수 있습니다. dumpTable()
for instance을 참조하십시오.
어떻게하면 pg_dump
을 복사하려고하면 스스로 유지 관리 악몽을 만들게됩니다. PostgreSQL 카탈로그는 psql
및 pg_dump
및 information_schema
과 같은 도구에서 일반적으로 변경 사항으로부터 사용자를 보호하므로 버전마다 안정적입니다. 카탈로그를 탐색하다 보면 메이저 버전이 출시 될 때마다 다시 테스트해야하며 이전 버전과의 호환성을 처리해야합니다. pg_dump
의 버전 별 사례를 살펴보고 자신이 무엇을 얻고 있는지 아이디어를 얻으십시오.
pg_dump
의 핵심 기능이 libpqdump
이거나 서버 측 확장에 있어야한다고 생각하지만 불행히도 그렇지 않으며 아무도 만들 수없는 많은 양의 작업을 기꺼이 수행해야합니다. 가능한.
짧은 버전 : 그냥 pg_dump
을 사용하십시오. 필요할 경우 -t
과 같은 선택적 덤프 옵션을 지원합니다.
+1 그는 OP를 원한다고해도 이것이 OP가 원하는 것임을 확신합니다. 이것은 고전적인 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) IMHO입니다. –
@ ÁlvaroG.Vicario 허, 나는 그 착오가 이름을 가지고 있다는 것을 몰랐다. 저는 보통 "(왜 귀찮아 질 수 있습니다)" "왜 * * * 어떻게 설명할까요?"라는 기본 질문을 당신이 해결하려고하는 것이 아니라 어떻게 해결해야한다고 생각 하는지를 설명 해주십시오." –
@CraigRinger .pg_dump를 사용하는 경우 옵션을 사용하면 브라우저를 통해 데이터베이스를 조작하기 위해 자체 스크립트를 작성하고 백업 스크립트를 복원하지 않을 것입니다. 프로덕션/호스팅에 사용하는 ISP는 매우 제한적인 인터페이스를 가지고 있습니다. 오직 PhpPgAdmin .pg_dump를 사용하는 것은 괜찮습니다.하지만 개발 및 확장을 위해 스위치와 옵션을 검토 한 결과, 편집을 많이해야하는 덤프 파일이 생성되어 PhpPgAdmin 쿼리 텍스트 영역에 쉽게 붙여 넣기가 가능합니다. CREATE TABLE 문을 사용하여 다시 빌드 할 요소를 쿼리하는 메서드 – dwlamb
- 1. 내부 쿼리에 대한 의문점
- 2. postgresql 쿼리에 대한 큰 ResultSet
- 3. 내부 조인 쿼리에 대한 도움말
- 4. 내부 쿼리에 대한 SQL 최적화
- 5. PostgreSQL 쿼리에 결과 데이터의 대상이 없습니다.
- 6. PostgreSQL 오류 : 쿼리에 결과 데이터의 대상이 없습니다.
- 7. 내장 쿼리에 내부 조인 할 수 없습니다.
- 8. 내부 쿼리에 대한 Oracle 매개 변수
- 9. 오리온의 쿼리에 대한 권한이 없습니다 *
- 10. java.lang.IllegalArgumentException : 필터 스트링츠 2에 대한 설명이 없습니다.
- 11. GC에 대한 약간의 설명이 필요 없습니다.
- 12. PHP 변수가 쿼리에 있습니다 - postgresql
- 13. django의 BaseCommentAbstractModel에 대한 설명이 필요합니다.
- 14. WCAG12.1 : 프레임에 설명이 없습니다.
- 15. Datatable에 대한 설명이 필요합니다.
- 16. flask.request에 대한 설명이 필요합니다.
- 17. 가 SVN에 대한 설명이
- 18. java.util.list에 대한 설명이 필요합니다.
- 19. Distribution.TestSuite에 대한 설명이 필요합니다.
- 20. linq에 대한 설명이 필요합니다
- 21. fixedEncodeURIComponent에 대한 설명이 필요합니다.
- 22. 재귀에 대한 설명이 필요합니까?
- 23. SQL 테이블에 대한 설명이
- 24. 지불 검증 - 대한 설명이
- 25. PostgreSQL 하위 쿼리에 다른 열을 어떻게 추가합니까?
- 26. CodenameOne에 대한 도구 설명이 있습니까?
- 27. Android android.content.SyncManager에 대한 설명이 필요하십니까?
- 28. Elasticseach json 쿼리에 대한 결과가 없습니다.
- 29. postgresql에 parameterizd 쿼리에 대한 지원이 없습니다.
- 30. 시퀀스에 여러 요소가있는 쿼리에 대한 요소가 없습니다.
PHP에서'psql -E'를 실행하는 방법,'psql'의 출력을 구문 분석하는 방법,'CREATE TABLE' 문을 생성하는 방법 또는 위의 방법 중 아무 것도 생성하지 않으시겠습니까? –
php 코드에서 사용할 수 있도록'psql -E'가 슬래시 명령 (예 : \ d mytable')에 표시되는 쿼리 집합을 가져 오는 방법을 묻습니다. 2 개 이상의 쿼리를 함께 사용하거나 연결하는 방법에 대한 논리가 있어야합니다. 하위 쿼리가 아닙니다. 그들은 기능을합니까? – dwlamb