저는 50 개가 넘는 테이블이있는 db에 대해 pg_dump 파일을 생성해야합니다. psql 커맨드 라인을 통해 이것을 수동으로 수행하는 방법을 알고 있지만 수동으로 수행하는 것보다 빠른 방법이 있어야한다고 생각합니다. 프로그래밍 방식으로 어떤 방법을 제안합니까? 예를 들어, 펄 스크립트가 pg_dump를 호출 할 수 있습니까? 내가 제대로 질문을 이해한다면pg_dump 개별 테이블 - 루프에서 수행 할 수 있습니까?
답변
후 다음 배쉬 스크립트는 충분합니다 :
#!/bin/bash
for table in `psql -Atc "\dt" | cut -d '|' -f2`
do
pg_dump -Fp -t $table -f $table.dump;
done
그것은 일부 데이터베이스 내의 모든 테이블의 목록을 가져옵니다하고 각 pg_dump -t
을 실행합니다. , 아마도 다음과 같은 당신의 테이블이 여러 스키마로 구성하는 경우
#!/usr/bin/perl
@tables = qx/psql -Atc "\\dt" | cut -d '|' -f2/;
foreach (@tables)
{
chomp($_);
system("pg_dump -Fp -t $_ -f $_.dump");
}
쿼리를 작성하는 사용자의 search_path에있는 테이블 만 잡습니다. LEFT pg_catalog 가입 더 나은 방법 pg_catalog.pg_class C로부터 "소유자"로 c.relname "이름"으로 "스키마", pg_catalog.pg_get_userbyid (c.relowner) 로' SELECT n.nspname를 사용하는 수 있습니다 .pg_namespace n ON n.oid = c.relnamespace 어디 c.relkind IN ('r', '') AND n.nspname이 아닌 ('pg_catalog', 'information_schema') AND n.nspname! ~ '^ pg_toast ' ;'테이블 목록을 얻으려면. – gsiems
@gsiems : 당신은 [search_path'] (http://www.postgresql.org/docs/current/interactive/runtime-config-client.html)에 대해 옳습니다 (좀 더 엄격하게 말하면 ['pg_table_is_visible']에 관한 것입니다) ('\ dt'에있는 http://www.postgresql.org/docs/current/interactive/functions-info.html#FUNCTIONS-INFO-SCHEMA-TABLE). 그러나이 테이블이없는 한, 이것은 나에게 과도한 것처럼 보입니다. 여러 스키마에 분산되어 있습니다 (search_path는이 문제를 처리하기 위해 설정되지 않았습니다). 물론 솔루션이 더 포괄적입니다. –
감사합니다. perl 스크립트가 올바른 방향으로 저를 보냈습니다. 시스템을 인식하지 못했습니다. 명령 전에. – Elisa
pg_dumpall의이 전체 DB
http://www.postgresql.org/files/documentation/books/aw_pgsql/node265.html
감사합니다. pg_dumpall을 알고 있었지만 개별 스크립트를 tablesinto pg_dump하고 싶습니다. – Elisa
를 덤프하는 도구입니다 : 여기
당신이 원하는 경우 펄과 동일 당신을 위해 일할 것입니다 :#!/usr/bin/env perl
use strict;
use warnings;
my $database_name = 'book_library';
my $query = <<"EOT";
SELECT n.nspname as table_schema,
c.relname as table_name
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND n.nspname NOT LIKE '^pg_%'
;
EOT
$query =~ s/\n\s*/ /g;
my @results = `echo "$query" | psql -At $database_name`;
foreach (@results) {
chomp;
my ($schema, $table) = split /\|/, $_;
next unless ($schema && $table);
my $cmd = "pg_dump -U postgres -Fp -t $schema.$table -f $schema.$table.dump $database_name";
system($cmd);
}
$ database_name 변수를 적절히 설정해야하며 .pgpass 파일을 사용한다는 가정이 있습니다.
- 1. 어떻게 자이로 스코프 데이터의 개별 통합을 수행 할 수 있습니까?
- 2. 두 개의 개별 서버에 게시 작업을 수행 할 수 있습니까?
- 3. sqlite는 개별 파일에서 개별 테이블을로드 할 수 있습니까?
- 4. LINQ가이 작업을 수행 할 수 있습니까?
- 5. 개별 파일을 커밋 할 수 있습니까?
- 6. CSS 메뉴에서이 작업을 수행 할 수 있습니까?
- 7. 스키닝으로이 작업을 수행 할 수 있습니까?
- 8. 루프없이이 쿼리를 수행 할 수 있습니까?
- 9. 하나의 명령으로이 작업을 수행 할 수 있습니까?
- 10. BigTable에서 OLAP을 수행 할 수 있습니까?
- 11. SQL 커서 내에서 개별 루프로 블로킹을 제한 할 수 있습니까?
- 12. 어떻게 모든 클래스를 개별 파일로 추출 할 수 있습니까?
- 13. WPF에서 필렛 커브를 수행 할 수 있습니까?
- 14. ASP.NET 라우팅에서이 작업을 수행 할 수 있습니까?
- 15. 하나의 루프에서이 작업을 수행 할 수 있습니까?
- 16. 해시에서 조건부 정렬을 수행 할 수 있습니까?
- 17. OpenGL에서이 작업을 수행 할 수 있습니까?
- 18. 파이썬에서 파일 작업을 수행 할 수 있습니까?
- 19. UIAnimation을 사용하여 수행 할 수 있습니까?
- 20. LINQ에서이 SQL을 수행 할 수 있습니까?
- 21. git push가 이것을 수행 할 수 있습니까?
- 22. 어떤 언어로이 작업을 수행 할 수 있습니까?
- 23. ORM으로이 작업을 수행 할 수 있습니까? - Django
- 24. 어떻게하면 XAML에서이 작업을 수행 할 수 있습니까?
- 25. 빠른 방법으로 어떻게 수행 할 수 있습니까?
- 26. 다음 변환을 어떻게 수행 할 수 있습니까?
- 27. 이 작업을 쉽게 수행 할 수 있습니까?
- 28. pthread가 자체적으로 정리를 수행 할 수 있습니까?
- 29. Adobe Flex에서 #define을 수행 할 수 있습니까?
- 30. mysql 5.1로 피벗을 수행 할 수 있습니까?
정말로 각 테이블을 자신의 것으로 덤프해야합니까? 외래 키 제약 조건을 위반하지 않고 어떤 테이블을 어떤 순서로 복원해야하는지 어떻게 알 수 있습니까? – DrColossos
수정 : 전체 테이블이 아닌 테이블 스키마 만 폐기하고있었습니다. – Elisa