Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/libpgtcl.doc')
-rw-r--r--doc/libpgtcl.doc181
1 files changed, 181 insertions, 0 deletions
diff --git a/doc/libpgtcl.doc b/doc/libpgtcl.doc
new file mode 100644
index 00000000000..3ee5c6dfc09
--- /dev/null
+++ b/doc/libpgtcl.doc
@@ -0,0 +1,181 @@
+
+pgtcl is a tcl package for front-end programs to interface with Postgres95
+backends. PgTcl does not use the libpq library but communicates to
+the backend directly via the frontend-backend protocol. Thus, it is
+more efficient than previous postgres->tcl bindings which are layered
+on top of libpq. In addition, pgtcl can handle multiple backend
+connections from a single frontend application.
+
+If you have any questions or bug reports, please send them to
+Jolly Chen at jolly@cs.berkeley.edu.
+
+-------------------------------------------------------------------
+
+
+The pgtcl package provides the following commands.
+
+ pg_connect - opens a connection to the backend server
+ pg_disconnect - closes a connection
+ pg_exec - send a query to the backend
+ pg_result - manipulate the results of a query
+
+ pg_lo_creat - create a large object
+ pg_lo_open - open a large object
+ pg_lo_close - close a large object
+ pg_lo_read - read a large object
+ pg_lo_write - write a large object
+ pg_lo_lseek - seek to a position on a large object
+ pg_lo_tell - return the current seek position of a large object
+ pg_lo_unlink - delete a large object
+ pg_lo_import - import a Unix file into a large object
+ pg_lo_export - export a large object into a Unix file
+
+1) pg_connect: opens a connection to the backend
+
+ syntax:
+ pg_connect dbName [-host hostName] [-port portNumber] [-tty pqtty] [-options optionalBackendArgs]]
+
+ the return result is either an error message or a handle for a database
+ connection. Handles start with the prefix "pgp"
+
+
+2) pg_disconnect: closes a connection
+
+ syntax:
+ pg_disconnect connection
+
+ The argument passed in must be a connection pointer.
+
+3) pg_exec: send a query string to the backend
+
+ syntax:
+ pg_exec connection query
+
+ the return result is either an error message or a handle for a query
+ result. Handles start with the prefix "pgp"
+
+4) pg_result: get information about a query result
+
+ syntax:
+ pg_result result ?option?
+
+ the options are:
+ -status
+ the status of the result
+ -oid
+ if the last query was an insert, returns the oid of the
+ inserted tuple
+ -conn
+ the connection that produced the result
+ -assign arrayName
+ assign the results to an array
+ -numTuples
+ the number of tuples in the query
+ -attributes
+ returns a list of the name/type pairs of the tuple attributes
+ -getTuple tupleNumber
+ returns the values of the tuple in a list
+ -clear
+ clear the result buffer. Do not reuse after this
+
+----------------------------------------------------------------------------
+The pg_lo* routines are interfaces to the Inversion large objects in postgres.
+The functions are designed to mimic the analogous file system functions in
+the standard Unix file system interface.
+
+The pg_lo* routines should typically be used within a BEGIN/END transaction
+block becaus the file descriptor returned by pg_lo_open is only valid for
+the current transaction. pg_lo_import and pg_lo_export MUST be used
+in a BEGIN/END transaction block.
+
+* pg_lo_creat: create a large object
+
+ syntax:
+ g_lo_creat conn mode
+
+mode can be any OR'ing together of INV_READ, INV_WRITE, and INV_ARCHIVE.
+The OR delimiter character is "|".
+ e.g. [pg_lo_creat $conn "INV_READ|INV_WRITE"]
+
+returns the oid of the large object created.
+
+* pg_lo_open: open a large object
+
+ syntax:
+ pg_lo_open conn objOid mode
+
+ where mode can be either "r", "w", or "rw"
+
+ returns a file descriptor for use in later pg_lo* routines
+
+* pg_lo_close: close a large object
+
+ syntax:
+ pg_lo_close conn fd
+
+* pg_lo_read: read a large object
+
+ syntax:
+ pg_lo_read conn fd bufVar len
+
+reads at most len bytes from a large object into a variable named bufVar.
+Note that the third argument should be a variable name.
+
+* pg_lo_write: write a large object
+
+ syntax:
+ pg_lo_write conn fd buf len
+
+write at most len bytes to a large object.
+The third argument should be the actual string to write, not a variable name.
+
+* pg_lo_lseek: seek to a position on a large object
+
+ syntax:
+ pg_lo_lseek conn fd offset whence
+
+whence can be "SEEK_CUR", "SEEK_END", or "SEEK_SET"
+
+* pg_lo_tell: return the current seek position of a large object
+
+ syntax:
+ pg_lo_tell conn fd
+
+* pg_lo_unlink: delete a large object
+
+ syntax:
+ pg_lo_unlink conn lobjId
+
+* pg_lo_import: import a Unix file into a large object
+
+ syntax:
+ pg_lo_import conn filename
+
+ pg_lo_import must be called within a BEGIN/END transaction block
+
+* pg_lo_export: export a large object into a Unix file
+
+ syntax:
+ pg_lo_export conn lobjId filename
+
+ pg_lo_export must be called within a BEGIN/END transaction block
+
+------------------------------------------------------------------
+Here's a small example of how to use the routines:
+
+# getDBs :
+# get the names of all the databases at a given host and port number
+# with the defaults being the localhost and port 5432
+# return them in alphabetical order
+proc getDBs { {host "localhost"} {port "5432"} } {
+ # datnames is the list to be result
+ set conn [pg_connect template1 -host $host -port $port]
+ set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname"]
+ set ntups [pg_result $res -numTuples]
+ for {set i 0} {$i < $ntups} {incr i} {
+ lappend datnames [pg_result $res -getTuple $i]
+ }
+ pg_disconnect $conn
+ return $datnames
+}
+