@@ -16,7 +16,7 @@ pub fn dump_db(
16
16
target_name : String ,
17
17
) -> Result < ( ) , PerformError > {
18
18
let directory = DumpDirectory :: create ( ) ?;
19
- directory. dump_db ( & database_url) ?;
19
+ directory. populate ( & database_url) ?;
20
20
let tarball = DumpTarball :: create ( & directory. export_dir ) ?;
21
21
tarball. upload ( & target_name, & env. uploader ) ?;
22
22
println ! ( "Database dump uploaded to {}." , & target_name) ;
@@ -45,14 +45,11 @@ impl DumpDirectory {
45
45
} )
46
46
}
47
47
48
- pub fn dump_db ( & self , database_url : & str ) -> Result < ( ) , PerformError > {
48
+ pub fn populate ( & self , database_url : & str ) -> Result < ( ) , PerformError > {
49
49
self . add_readme ( ) ?;
50
50
self . add_metadata ( ) ?;
51
- let export_script = self . export_dir . join ( "export.sql" ) ;
52
- let import_script = self . export_dir . join ( "import.sql" ) ;
53
- gen_scripts:: gen_scripts ( & export_script, & import_script) ?;
54
- std:: fs:: create_dir ( self . export_dir . join ( "data" ) ) ?;
55
- run_psql ( & export_script, database_url)
51
+ self . dump_schema ( database_url) ?;
52
+ self . dump_db ( database_url)
56
53
}
57
54
58
55
fn add_readme ( & self ) -> Result < ( ) , PerformError > {
@@ -80,6 +77,30 @@ impl DumpDirectory {
80
77
serde_json:: to_writer_pretty ( file, & metadata) ?;
81
78
Ok ( ( ) )
82
79
}
80
+
81
+ pub fn dump_schema ( & self , database_url : & str ) -> Result < ( ) , PerformError > {
82
+ let schema_sql = File :: create ( self . export_dir . join ( "schema.sql" ) ) ?;
83
+ let status = std:: process:: Command :: new ( "pg_dump" )
84
+ . arg ( "--schema-only" )
85
+ . arg ( "--no-owner" )
86
+ . arg ( "--no-acl" )
87
+ . arg ( database_url)
88
+ . stdout ( schema_sql)
89
+ . spawn ( ) ?
90
+ . wait ( ) ?;
91
+ if !status. success ( ) {
92
+ Err ( "pg_dump did not finish successfully." ) ?;
93
+ }
94
+ Ok ( ( ) )
95
+ }
96
+
97
+ pub fn dump_db ( & self , database_url : & str ) -> Result < ( ) , PerformError > {
98
+ let export_script = self . export_dir . join ( "export.sql" ) ;
99
+ let import_script = self . export_dir . join ( "import.sql" ) ;
100
+ gen_scripts:: gen_scripts ( & export_script, & import_script) ?;
101
+ std:: fs:: create_dir ( self . export_dir . join ( "data" ) ) ?;
102
+ run_psql ( & export_script, database_url)
103
+ }
83
104
}
84
105
85
106
impl Drop for DumpDirectory {
0 commit comments