]> granicus.if.org Git - postgis/commitdiff
Force early flushing of postgis_restore.pl output
authorSandro Santilli <strk@kbt.io>
Sun, 10 Mar 2019 18:51:21 +0000 (18:51 +0000)
committerSandro Santilli <strk@kbt.io>
Sun, 10 Mar 2019 18:51:21 +0000 (18:51 +0000)
Reduces memory usage when piping output to further processing filter.

Patch by Hugh Ranalli

Closes #4330

git-svn-id: http://svn.osgeo.org/postgis/trunk@17320 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
utils/postgis_restore.pl.in

diff --git a/NEWS b/NEWS
index 39d51ebf9e6281f2ba6b9cf1b65c04b831e5acea..e5c21c37792164efadc1150d276582d465e66427 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -35,6 +35,8 @@ PostGIS 3.0.0
   - #4342, Move deprecated functions into legacy.sql file
   - #4341, Using "support function" API in PgSQL 12+ to replace SQL inlining
            as the mechanism for providing index support under ST_Intersects, et al
+  - #4330, postgis_restore OOM when output piped to an intermediate process
+           (Hugh Ranalli)
   - #4322, Support for Proj 6+ API, bringing more accurate datum transforms
            and support for WKT projections
   - #4153, ST_Segmentize now splits segments proportionally (Darafei
index 0127a7d10da52cdba56839443ecccb20bc1385c7..6b52c8f4fffcee96f0084f86c1c8f4502cba891a 100644 (file)
@@ -94,6 +94,8 @@ die "$me:\tUnable to open dump file '$dumpfile'.\n" if ! -r $dumpfile;
 
 print STDERR "Converting $dumpfile to ASCII on stdout...\n";
 
+STDOUT->autoflush(1);
+
 ######################################################################
 # Load the signatures of things to skip.
 #
@@ -265,7 +267,7 @@ while( my $l = <INPUT> ) {
   #
   elsif ( $l =~ /CREATE TABLE *([^ ,]*)/)
   {
-    my @sublines = ($l);
+    print STDOUT $l;
     while( my $subline = <INPUT>)
     {
       if ( $subline =~ /CONSTRAINT "?enforce_dims_/i ) {
@@ -281,10 +283,9 @@ while( my $l = <INPUT> ) {
           print STDERR "WARNING: could not find SRID value in: $subline";
         }
       }
-      push(@sublines, $subline);
+      print STDOUT $subline;
       last if $subline =~ /;[\t ]*$/;
     }
-    print STDOUT @sublines;
     next;
   }
 
@@ -292,15 +293,13 @@ while( my $l = <INPUT> ) {
   # See http://trac.osgeo.org/postgis/ticket/2759
   elsif ( $l =~ /^COMMENT ON .* IS '(.*)/)
   {
-    my @sublines = ($l);
-    my $comment = $1;
+    print STDOUT $l;
+    while( my $subline = <INPUT>)
     # A comment ends with an odd number of single quotes and a semicolon
-    while( $comment !~ /('*)[\t ]*;[\t ]*$/ || length($1) % 2 == 0)
     {
-      $comment = <INPUT>;
-      push(@sublines, $comment);
+      print STDOUT $subline;
+      last if ( $subline !~ /('*)[\t ]*;[\t ]*$/ || length($1) % 2 == 0)
     }
-    print STDOUT @sublines;
     next;
   }