📄 example.oldstyle
字号:
#!/usr/local/bin/perl# $Id: example.oldstyle,v 1.6 1998/09/27 19:12:35 mergl Exp $######################### globals$| = 1;use Pg;$dbmain = 'template1';$dbname = 'pgperltest';$trace = '/tmp/pgtrace.out';$DEBUG = 0; # set this to 1 for traces######################### the following functions will be tested# PQsetdb()# PQdb()# PQuser()# PQport()# PQstatus()# PQfinish()# PQerrorMessage()# PQtrace()# PQuntrace()# PQexec()# PQconsumeInput# PQgetline()# PQputline()# PQendcopy()# PQresultStatus()# PQntuples()# PQnfields()# PQfname()# PQfnumber()# PQftype()# PQfsize()# PQcmdStatus()# PQoidStatus()# PQcmdTuples()# PQgetvalue()# PQclear()# PQprint()# PQnotifies()# PQlo_import()# PQlo_export()# PQlo_unlink()######################### the following functions will not be tested# PQconnectdb()# PQconndefaults()# PQsetdbLogin()# PQreset()# PQrequestCancel()# PQpass()# PQhost()# PQtty()# PQoptions()# PQsocket()# PQbackendPID()# PQsendQuery()# PQgetResult()# PQisBusy()# PQgetlineAsync()# PQputnbytes()# PQmakeEmptyPGresult()# PQfmod()# PQgetlength()# PQgetisnull()# PQdisplayTuples()# PQprintTuples()# PQlo_open()# PQlo_close()# PQlo_read()# PQlo_write()# PQlo_creat()# PQlo_lseek()# PQlo_tell()######################### handles error condition$SIG{PIPE} = sub { print "broken pipe\n" };######################### create and connect to test database$conn = PQsetdb('', '', '', '', $dbmain);die PQerrorMessage($conn) unless PGRES_CONNECTION_OK eq PQstatus($conn);print "connected to $dbmain\n";# do not complain when dropping $dbname$result = PQexec($conn, "DROP DATABASE $dbname");PQclear($result);$result = PQexec($conn, "CREATE DATABASE $dbname");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);print "created database $dbname\n";PQclear($result);PQfinish($conn);$conn = PQsetdb('', '', '', '', $dbname);die PQerrorMessage($conn) unless PGRES_CONNECTION_OK eq PQstatus($conn);print "connected to $dbname\n";######################### debug, PQtraceif ($DEBUG) { open(TRACE, ">$trace") || die "can not open $trace: $!"; PQtrace($conn, TRACE); print "enabled tracing into $trace\n";}######################### check PGconn$db = PQdb($conn);print " database: $db\n";$user = PQuser($conn);print " user: $user\n";$port = PQport($conn);print " port: $port\n";######################### create and insert into table$result = PQexec($conn, "CREATE TABLE person (id int4, name char(16))");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);print "created table, status = ", PQcmdStatus($result), "\n";PQclear($result);for ($i = 1; $i <= 5; $i++) { $result = PQexec($conn, "INSERT INTO person VALUES ($i, 'Edmund Mergl')"); die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result); PQclear($result);}print "insert into table, last oid = ", PQoidStatus($result), "\n";######################### copy to stdout, PQgetline$result = PQexec($conn, "COPY person TO STDOUT");die PQerrorMessage($conn) unless PGRES_COPY_OUT eq PQresultStatus($result);print "copy table to STDOUT:\n";PQclear($result);$ret = 0;$i = 1;while (-1 != $ret) { $ret = PQgetline($conn, $string, 256); last if $string eq "\\."; print " ", $string, "\n"; $i++;}die PQerrorMessage($conn) unless 0 == PQendcopy($conn);######################### delete and copy from stdin, PQputline$result = PQexec($conn, "BEGIN");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);PQclear($result);$result = PQexec($conn, "DELETE FROM person");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);print "delete from table, command status = ", PQcmdStatus($result), ", no. of tuples = ", PQcmdTuples($result), "\n";PQclear($result);$result = PQexec($conn, "COPY person FROM STDIN");die PQerrorMessage($conn) unless PGRES_COPY_IN eq PQresultStatus($result);print "copy table from STDIN:\n";PQclear($result);for ($i = 1; $i <= 5; $i++) { # watch the tabs and do not forget the newlines PQputline($conn, "$i Edmund Mergl\n");}PQputline($conn, "\\.\n");die PQerrorMessage($conn) unless 0 == PQendcopy($conn);$result = PQexec($conn, "END");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);PQclear($result);######################### select from person, PQgetvalue$result = PQexec($conn, "SELECT * FROM person");die PQerrorMessage($conn) unless PGRES_TUPLES_OK eq PQresultStatus($result);print "select from table:\n";for ($k = 0; $k < PQnfields($result); $k++) { print " field = ", $k, "\tfname = ", PQfname($result, $k), "\tftype = ", PQftype($result, $k), "\tfsize = ", PQfsize($result, $k), "\tfnumber = ", PQfnumber($result, PQfname($result, $k)), "\n";}for ($k = 0; $k < PQntuples($result); $k++) { for ($l = 0; $l < PQnfields($result); $l++) { print " ", PQgetvalue($result, $k, $l); } print "\n";}PQclear($result);######################### PQnotifiesif (! defined($pid = fork)) { die "can not fork: $!";} elsif (! $pid) { # I'm the child sleep 2; $conn = PQsetdb('', '', '', '', $dbname); $result = PQexec($conn, "NOTIFY person"); PQclear($result); PQfinish($conn); exit;}$result = PQexec($conn, "LISTEN person");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);print "listen table: status = ", PQcmdStatus($result), "\n";PQclear($result);while (1) { PQconsumeInput($conn); ($table, $pid) = PQnotifies($conn); last if $pid;}print "got notification: table = ", $table, " pid = ", $pid, "\n";######################### PQprint$result = PQexec($conn, "SELECT * FROM person");die PQerrorMessage($conn) unless PGRES_TUPLES_OK eq PQresultStatus($result);print "select from table and print:\n";PQprint(STDOUT, $result, 0, 0, 0, 0, 0, 0, " ", "", "", "");PQclear($result);######################### PQlo_import, PQlo_export, PQlo_unlink$lobject_in = '/tmp/gaga.in';$lobject_out = '/tmp/gaga.out';$data = "testing large objects using lo_import and lo_export";open(FD, ">$lobject_in") or die "can not open $lobject_in";print(FD $data);close(FD);$result = PQexec($conn, "BEGIN");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);PQclear($result);$lobjOid = PQlo_import($conn, "$lobject_in") or die PQerrorMessage($conn);print "importing file as large object, Oid = ", $lobjOid, "\n";die PQerrorMessage($conn) unless 1 == PQlo_export($conn, $lobjOid, "$lobject_out");print "exporting large object as temporary file\n";$result = PQexec($conn, "END");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);PQclear($result);print "comparing imported file with exported file: ";print "not " unless (-s "$lobject_in" == -s "$lobject_out");print "ok\n";die PQerrorMessage($conn) if -1 == PQlo_unlink($conn, $lobjOid);unlink $lobject_in;unlink $lobject_out;print "unlink large object\n";######################### debug, PQuntraceif ($DEBUG) { close(TRACE) || die "bad TRACE: $!"; PQuntrace($conn); print "tracing disabled\n";}######################### disconnect and drop test databasePQfinish($conn);$conn = PQsetdb('', '', '', '', $dbmain);die PQerrorMessage($conn) unless PGRES_CONNECTION_OK eq PQstatus($conn);print "connected to $dbmain\n";$result = PQexec($conn, "DROP DATABASE $dbname");die PQerrorMessage($conn) unless PGRES_COMMAND_OK eq PQresultStatus($result);print "drop database\n";PQclear($result);PQfinish($conn);######################### EOF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -