@@ -23,7 +23,7 @@ package check_postgres;
23
23
use Getopt::Long qw/ GetOptions/ ;
24
24
Getopt::Long::Configure(qw/ no_ignore_case pass_through / );
25
25
use File::Basename qw/ basename/ ;
26
- use File::Spec;
26
+ use File::Spec::Functions ;
27
27
use File::Temp qw/ tempfile tempdir/ ;
28
28
File::Temp-> safe_level( File::Temp::MEDIUM );
29
29
use Cwd;
@@ -113,6 +113,7 @@ package check_postgres;
113
113
' checkpoint-baddir2' => q{ pg_controldata could not read the given data directory: "$1"} ,
114
114
' checkpoint-badver' => q{ Failed to run pg_controldata - probably the wrong version ($1)} ,
115
115
' checkpoint-badver2' => q{ Failed to run pg_controldata - is it the correct version?} ,
116
+ ' checkpoint-nobin' => q{ Could not find a suitable pg_controldata executable} ,
116
117
' checkpoint-nodir' => q{ Must supply a --datadir argument or set the PGDATA environment variable} ,
117
118
' checkpoint-nodp' => q{ Must install the Perl module Date::Parse to use the checkpoint action} ,
118
119
' checkpoint-noparse' => q{ Unable to parse pg_controldata output: "$1"} ,
@@ -373,6 +374,7 @@ package check_postgres;
373
374
' checkpoint-baddir2' => q{ pg_controldata no pudo leer el directorio de datos: "$1"} ,
374
375
' checkpoint-badver' => q{ Fallo al ejecutar pg_controldata - probable que la versión sea incorrecta ($1)} ,
375
376
' checkpoint-badver2' => q{ Fallo al ejecutar pg_controldata - verifique que es la versión correcta} ,
377
+ ' checkpoint-nobin' => q{ Could not find a suitable pg_controldata executable} ,
376
378
' checkpoint-nodir' => q{ Debe especificar el argumento --datadir o definir la variable de ambiente PGDATA} ,
377
379
' checkpoint-nodp' => q{ Debe instalar el módulo Perl Date::Parse para usar la acción checkpoint} ,
378
380
' checkpoint-noparse' => q{ No se pudo interpretar la salida de pg_controldata: "$1"} ,
@@ -631,6 +633,7 @@ package check_postgres;
631
633
' checkpoint-baddir2' => q{ pg_controldata n'a pas pu lire le répertoire des données indiqué : « $1 »} ,
632
634
' checkpoint-badver' => q{ Échec lors de l'exécution de pg_controldata - probablement la mauvaise version ($1)} ,
633
635
' checkpoint-badver2' => q{ Échec lors de l'exécution de pg_controldata - est-ce la bonne version ?} ,
636
+ ' checkpoint-nobin' => q{ Could not find a suitable pg_controldata executable} ,
634
637
' checkpoint-nodir' => q{ Vous devez fournir un argument --datadir ou configurer la variable d'environnement PGDATA} ,
635
638
' checkpoint-nodp' => q{ Vous devez installer le module Perl Date::Parse pour utiliser l'action checkpoint} ,
636
639
' checkpoint-noparse' => q{ Incapable d'analyser le résultat de la commande pg_controldata : "$1"} ,
@@ -895,6 +898,7 @@ package check_postgres;
895
898
' checkpoint-baddir2' => q{ pg_controldata konnte das angebene Verzeichnis lesen: "$1"} ,
896
899
' checkpoint-badver' => q{ Kann pg_controldata nicht starten - vielleicht die falsche Version ($1)} ,
897
900
' checkpoint-badver2' => q{ Fehler beim Start von pg_controldata - ist es die richtige Version?} ,
901
+ ' checkpoint-nobin' => q{ Could not find a suitable pg_controldata executable} ,
898
902
' checkpoint-nodir' => q{ Entweder muss die Option --datadir als Argument angegebn werden, oder die Umgebungsvariable PGDATA muss gesetzt sein} ,
899
903
' checkpoint-nodp' => q{ Das Perl-Modul Date::Parse muss installiert sein für die Verwendung der checkpoint-Aktion} ,
900
904
' checkpoint-noparse' => q{ Kann die Ausgabe von pg_controldata nicht lesen: "$1"} ,
@@ -3912,16 +3916,40 @@ sub open_controldata {
3912
3916
}
3913
3917
3914
3918
# # Run pg_controldata
3915
- # # We still catch deprecated option
3916
3919
my $pgc ;
3917
3920
if (defined $ENV {PGCONTROLDATA } and length $ENV {PGCONTROLDATA }) {
3918
3921
$pgc = " $ENV {PGCONTROLDATA}" ;
3919
3922
}
3923
+ elsif (defined $ENV {PGBINDIR } and length $ENV {PGBINDIR }) {
3924
+ $pgc = " $PGBINDIR /pg_controldata" ;
3925
+ }
3920
3926
else {
3921
- $pgc = (defined $PGBINDIR ) ? " $PGBINDIR /pg_controldata" : ' pg_controldata' ;
3922
- chomp ($pgc = qx{ which "$pgc "} );
3927
+ my $pgctry = ' pg_controldata' ;
3928
+ my $result = qx{ $pgctry --version 2>/dev/null} ;
3929
+ if ($result =~ / \d / ) {
3930
+ $pgc = $pgctry ;
3931
+ }
3932
+ else {
3933
+ # # Need to refactor this someday
3934
+ my $basedir = ' /usr/lib/postgresql/' ;
3935
+ if (opendir my $dh , $basedir ) {
3936
+ for my $subdir (sort { $b <=> $a } grep { / ^\d +[\d\. ]+$ / } readdir $dh ) {
3937
+ $pgctry = catfile($basedir , $subdir , ' bin' , ' pg_controldata' );
3938
+ next if ! -e $pgctry ;
3939
+ $result = qx{ $pgctry --version 2>/dev/null} ;
3940
+ if ($result =~ / \d / ) {
3941
+ $pgc = $pgctry ;
3942
+ last ;
3943
+ }
3944
+ }
3945
+ closedir $dh ;
3946
+ }
3947
+ if (! defined $pgc ) {
3948
+ ndie msg(' checkpoint-nobin' );
3949
+ }
3950
+ }
3923
3951
}
3924
- -x $pgc or ndie msg(' opt-psql-noexec ' , $pgc );
3952
+ -x $pgc or ndie msg(' checkpoint-nobin ' );
3925
3953
3926
3954
$COM = qq{ $pgc "$dir "} ;
3927
3955
eval {
@@ -7625,7 +7653,7 @@ sub audit_filename {
7625
7653
my $adir = $opt {' audit-file-dir' };
7626
7654
if (defined $adir ) {
7627
7655
-d $adir or die qq{ Cannot write to directory "$adir ": $! \n } ;
7628
- $filename = File::Spec -> catfile($adir , $filename );
7656
+ $filename = catfile($adir , $filename );
7629
7657
}
7630
7658
7631
7659
return $filename ;
0 commit comments