From: | Leif Biberg Kristensen <leif(at)solumslekt(dot)org> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Passing parameters into an in-line psql invocation |
Date: | 2011-06-02 19:50:39 |
Message-ID: | 201106022150.39706.leif@solumslekt.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Thursday 2. June 2011 18.58.23 Gauthier, Dave wrote:
> Hi:
>
> I'd like to pass a parameter into an inline psql call that itself calls an
> sql script, something like...
>
> psql mydb -c "\i thesqlscript foo"
>
> Where"foo" is the value I want to pass in.
>
> Just as good would be the ability to sniff out an environment variable from
> within the sql script ("thesqlscript" in the example above). In perl, I
> would use $ENV{VARNAME}. Is there something like that in Postgres SQL?
>
> V8.3.4 on Linux (upgrading to v9 very soon).
>
> Thanks for any ideas !
Personally I prefer to write a small wrapper in Perl for interaction with
Postgres from the command line. Here's a boilerplate:
#! /usr/bin/perl
use strict;
use DBI;
my $val = shift;
if ((!$val) || !($val =~ /^\d+$/)) {
print "Bad or missing parameter $val\n";
exit;
}
my $dbh = DBI->connect("dbi:Pg:dbname=mydb", '', '',
{AutoCommit => 1}) or die $DBI::errstr;
my $sth = $dbh->prepare("SELECT foo(?)");
while (my $text = <STDIN>) {
chomp($text);
$sth->execute($val);
my $retval = $sth->fetch()->[0];
if ($retval < 0) {
$retval = abs($retval);
print "Duplicate of $retval, not added.\n";
}
else {
print "$retval added.\n";
}
}
$sth->finish;
$dbh->disconnect;
From | Date | Subject | |
---|---|---|---|
Next Message | BRUSSER Michael | 2011-06-02 20:17:59 | invalid byte sequence for encoding "UTF8" |
Previous Message | Bosco Rama | 2011-06-02 19:28:22 | Re: Passing parameters into an in-line psql invocation |