Minor documentation improvements and markup fixes.

This commit is contained in:
Tom Lane 1998-10-17 22:02:21 +00:00
parent 71a5da47d2
commit 5f27ac6b5e
9 changed files with 185 additions and 164 deletions

View File

@ -208,8 +208,8 @@ If the file you specify is
very simple, since the commands to do it are just:
<ProgramListing>
# simple HP-UX example
&percnt; cc +z +u -c foo.c
&percnt; ld -b -o foo.sl foo.o
% cc +z +u -c foo.c
% ld -b -o foo.sl foo.o
</ProgramListing>
</Para>
@ -221,21 +221,21 @@ If the file you specify is
Under SunOS 4.x, the commands look like:
<ProgramListing>
# simple SunOS 4.x example
&percnt; cc -PIC -c foo.c
&percnt; ld -dc -dp -Bdynamic -o foo.so foo.o
% cc -PIC -c foo.c
% ld -dc -dp -Bdynamic -o foo.so foo.o
</ProgramListing>
and the equivalent lines under Solaris 2.x are:
<ProgramListing>
# simple Solaris 2.x example
&percnt; cc -K PIC -c foo.c
&percnt; ld -G -Bdynamic -o foo.so foo.o
% cc -K PIC -c foo.c
% ld -G -Bdynamic -o foo.so foo.o
</ProgramListing>
or
<ProgramListing>
# simple Solaris 2.x example
&percnt; gcc -fPIC -c foo.c
&percnt; ld -G -Bdynamic -o foo.so foo.o
% gcc -fPIC -c foo.c
% ld -G -Bdynamic -o foo.so foo.o
</ProgramListing>
</Para>

View File

@ -47,7 +47,7 @@ This package was originally written by Jolly Chen.
</ROW>
<ROW>
<ENTRY>pg_select</ENTRY>
<ENTRY>loop over the result of a select statement</ENTRY>
<ENTRY>loop over the result of a SELECT statement</ENTRY>
</ROW>
<ROW>
<ENTRY>pg_listen</ENTRY>
@ -76,7 +76,7 @@ This package was originally written by Jolly Chen.
</ROW>
<ROW>
<ENTRY>pg_lo_lseek</ENTRY>
<ENTRY>seek to a position on a large object</ENTRY>
<ENTRY>seek to a position in a large object</ENTRY>
</ROW>
<ROW>
<ENTRY>pg_lo_tell</ENTRY>
@ -168,14 +168,33 @@ proc getDBs { {host "localhost"} {port "5432"} } {
pg_connect -conninfo <REPLACEABLE CLASS="PARAMETER">connectOptions</REPLACEABLE>
pg_connect <REPLACEABLE CLASS="PARAMETER">dbName</REPLACEABLE> <OPTIONAL>-host <REPLACEABLE CLASS="PARAMETER">hostName</REPLACEABLE></OPTIONAL>
<OPTIONAL>-port <REPLACEABLE
CLASS="PARAMETER">portNumber</REPLACEABLE></OPTIONAL> <OPTIONAL>-tty
<REPLACEABLE CLASS="PARAMETER">pqtty</REPLACEABLE></OPTIONAL>
CLASS="PARAMETER">portNumber</REPLACEABLE></OPTIONAL> <OPTIONAL>-tty <REPLACEABLE
CLASS="PARAMETER">pqtty</REPLACEABLE></OPTIONAL>
<OPTIONAL>-options <REPLACEABLE
CLASS="PARAMETER">optionalBackendArgs</REPLACEABLE></OPTIONAL>
</SYNOPSIS>
<REFSECT2 ID="R2-PGTCL-PGCONNECT-1">
<REFSECT2INFO>
<DATE>1998-10-07</DATE>
</REFSECT2INFO>
<TITLE>Inputs (new style)
</TITLE>
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
<REPLACEABLE CLASS="PARAMETER">connectOptions</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>A string of connection options, each written in the form keyword = value.
</PARA>
</LISTITEM>
</VARLISTENTRY>
</VARIABLELIST>
</REFSECT2>
<REFSECT2 ID="R2-PGTCL-PGCONNECT-2">
<REFSECT2INFO>
<DATE>1997-12-24</DATE>
</REFSECT2INFO>
<TITLE>Inputs (old style)
@ -213,7 +232,7 @@ pg_connect <REPLACEABLE CLASS="PARAMETER">dbName</REPLACEABLE> <OPTIONAL>-host <
<OPTIONAL>-tty <REPLACEABLE CLASS="PARAMETER">pqtty</REPLACEABLE></OPTIONAL>
</TERM>
<LISTITEM>
<PARA>(need information thomas 1997-12-24)
<PARA>Specifies file or tty for optional debug output from backend.
</PARA>
</LISTITEM>
</VARLISTENTRY>
@ -229,25 +248,6 @@ pg_connect <REPLACEABLE CLASS="PARAMETER">dbName</REPLACEABLE> <OPTIONAL>-host <
</VARIABLELIST>
</REFSECT2>
<REFSECT2 ID="R2-PGTCL-PGCONNECT-2">
<REFSECT2INFO>
<DATE>1998-10-07</DATE>
</REFSECT2INFO>
<TITLE>Inputs (new style)
</TITLE>
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
<REPLACEABLE CLASS="PARAMETER">connectOptions</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>A string of connection options, each written in the form keyword = value.
</PARA>
</LISTITEM>
</VARLISTENTRY>
</VARIABLELIST>
</REFSECT2>
<REFSECT2 ID="R2-PGTCL-PGCONNECT-3">
<REFSECT2INFO>
<DATE>1997-12-24</DATE>
@ -423,7 +423,8 @@ Each entry in the list is a sublist of the format:
<para>
{optname label dispchar dispsize value}
<Para>
where the optname is usable as an option in pg_connect -conninfo.
where the optname is usable as an option in
<FUNCTION>pg_connect -conninfo</FUNCTION>.
</PARA>
</LISTITEM>
</VARLISTENTRY>
@ -785,7 +786,7 @@ created too many query result objects.
<REFNAME>pg_select
</REFNAME>
<REFPURPOSE>
loop over the result of a select statement
loop over the result of a SELECT statement
</REFPURPOSE>
<INDEXTERM ID="IX-PGTCL-PGSELECT-1"><PRIMARY>pgtcl</PRIMARY><SECONDARY>connecting</SECONDARY></INDEXTERM>
<INDEXTERM ID="IX-PGTCL-PGSELECT-2"><PRIMARY>pg_connect</PRIMARY></INDEXTERM>
@ -1500,7 +1501,7 @@ the actual string to write, not a variable name.
<REFNAMEDIV>
<REFNAME>pg_lo_lseek
</REFNAME>
<REFPURPOSE>seek to a position on a large object
<REFPURPOSE>seek to a position in a large object
</REFPURPOSE>
<INDEXTERM ID="IX-PGTCL-PGLOLSEEK-1"><PRIMARY>pgtcl</PRIMARY><SECONDARY>positioning</SECONDARY></INDEXTERM>
<INDEXTERM ID="IX-PGTCL-PGLOLSEEK-2"><PRIMARY>pg_lo_lseek</PRIMARY></INDEXTERM>

View File

@ -149,7 +149,7 @@ accepts and ignores this keyword for backward compatibility.)
</ListItem>
<ListItem>
<Para>
<Acronym>tty</Acronym> -- file or tty for optional debug output.
<Acronym>tty</Acronym> -- file or tty for optional debug output from backend.
</Para>
</ListItem>
</ItemizedList>
@ -166,20 +166,20 @@ default values for unspecified options.
PQconninfoOption *PQconndefaults(void)
struct PQconninfoOption
{
char *keyword; /* The keyword of the option */
char *envvar; /* Fallback environment variable name */
char *compiled; /* Fallback compiled in default value */
char *val; /* Options value */
char *label; /* Label for field in connect dialog */
char *dispchar; /* Character to display for this field
in a connect dialog. Values are:
"" Display entered value as is
"*" Password field - hide value
"D" Debug options - don't
create a field by default */
int dispsize; /* Field size in characters for dialog */
};
{
char *keyword; /* The keyword of the option */
char *envvar; /* Fallback environment variable name */
char *compiled; /* Fallback compiled in default value */
char *val; /* Option's value */
char *label; /* Label for field in connect dialog */
char *dispchar; /* Character to display for this field
in a connect dialog. Values are:
"" Display entered value as is
"*" Password field - hide value
"D" Debug options - don't
create a field by default */
int dispsize; /* Field size in characters for dialog */
};
</synopsis>
Returns the address of the connection options structure. This may
@ -409,18 +409,18 @@ soon.)
Returns the result status of the query. PQresultStatus can return one of the following values:
<synopsis>
PGRES_EMPTY_QUERY,
PGRES_COMMAND_OK, /* the query was a command returning no data */
PGRES_TUPLES_OK, /* the query successfully returned tuples */
PGRES_COPY_OUT, /* Copy Out (from server) data transfer started */
PGRES_COPY_IN, /* Copy In (to server) data transfer started */
PGRES_BAD_RESPONSE, /* an unexpected response was received */
PGRES_COMMAND_OK, /* the query was a command returning no data */
PGRES_TUPLES_OK, /* the query successfully returned tuples */
PGRES_COPY_OUT, /* Copy Out (from server) data transfer started */
PGRES_COPY_IN, /* Copy In (to server) data transfer started */
PGRES_BAD_RESPONSE, /* an unexpected response was received */
PGRES_NONFATAL_ERROR,
PGRES_FATAL_ERROR
</synopsis>
If the result status is PGRES_TUPLES_OK, then the
routines described below can be used to retrieve the
tuples returned by the query. Note that a SELECT that
happens to retrieve zero tuples still shows PGRES_TUPLES_OK;
happens to retrieve zero tuples still shows PGRES_TUPLES_OK.
PGRES_COMMAND_OK is for commands that can never return tuples.
</Para>
</ListItem>
@ -522,13 +522,15 @@ Oid PQftype(PGresult *res,
<Para>
<Function>PQfsize</Function>
Returns the size in bytes of the field
associated with the given field index. If the size
returned is -1, the field is a variable length
field. Field indices start at 0.
associated with the given field index.
Field indices start at 0.
<synopsis>
int PQfsize(PGresult *res,
int field_index);
</synopsis>
PQfsize returns the space allocated for this field in a database
tuple, in other words the size of the server's binary representation
of the data type. -1 is returned if the field is variable size.
</Para>
</ListItem>
@ -558,11 +560,12 @@ char* PQgetvalue(PGresult *res,
</synopsis>
For most queries, the value returned by PQgetvalue
is a null-terminated ASCII string representation
of the attribute value. If the query extracted data from
a <Acronym>BINARY</Acronym> cursor, then the value returned by
of the attribute value. But if PQbinaryTuples() is TRUE,
the value returned by
PQgetvalue is the binary representation of the
type in the internal format of the backend server.
It is the programmer's responsibility to cast and
type in the internal format of the backend server
(but not including the size word, if the field is variable-length).
It is then the programmer's responsibility to cast and
convert the data to the correct C type. The pointer
returned by PQgetvalue points to storage that is
part of the PGresult structure. One should not modify it,
@ -572,6 +575,22 @@ char* PQgetvalue(PGresult *res,
</Para>
</ListItem>
<ListItem>
<Para>
<Function>PQgetlength</Function>
Returns the length of a field (attribute) in bytes.
Tuple and field indices start at 0.
<synopsis>
int PQgetlength(PGresult *res,
int tup_num,
int field_num);
</synopsis>
This is the actual data length for the particular data value, that is the
size of the object pointed to by PQgetvalue. Note that for ASCII-represented
values, this size has little to do with the binary size reported by PQfsize.
</Para>
</ListItem>
<ListItem>
<Para>
<Function>PQgetisnull</Function>
@ -589,27 +608,6 @@ int PQgetisnull(PGresult *res,
</Para>
</ListItem>
<ListItem>
<Para>
<Function>PQgetlength</Function>
Returns the length of a field
(attribute) in bytes.
Tuple and field indices start at 0.
<synopsis>
int PQgetlength(PGresult *res,
int tup_num,
int field_num);
</synopsis>
This is the actual data length for the particular data value,
whereas PQfsize shows the allocated space for all entries in
this column.
If the field is a struct
varlena, the length returned here does not include
the size field of the varlena, i.e., it is 4 bytes
less.
</Para>
</ListItem>
<ListItem>
<Para>
<Function>PQcmdStatus</Function>
@ -658,18 +656,18 @@ void PQprint(FILE* fout, /* output stream */
PQprintOpt* po);
struct _PQprintOpt
{
pqbool header; /* print output field headings and row count */
pqbool align; /* fill align the fields */
pqbool standard; /* old brain dead format */
pqbool html3; /* output html tables */
pqbool expanded; /* expand tables */
pqbool pager; /* use pager for output if needed */
char *fieldSep; /* field separator */
char *tableOpt; /* insert to HTML &lt;table ...&gt; */
char *caption; /* HTML &lt;caption&gt; */
char **fieldName; /* null terminated array of replacement field names */
};
{
pqbool header; /* print output field headings and row count */
pqbool align; /* fill align the fields */
pqbool standard; /* old brain dead format */
pqbool html3; /* output html tables */
pqbool expanded; /* expand tables */
pqbool pager; /* use pager for output if needed */
char *fieldSep; /* field separator */
char *tableOpt; /* insert to HTML &lt;table ...&gt; */
char *caption; /* HTML &lt;caption&gt; */
char **fieldName; /* null terminated array of replacement field names */
};
</synopsis>
This function is intended to replace PQprintTuples(), which is
now obsolete. The <FileName>psql</FileName> program uses
@ -855,8 +853,8 @@ was actually collected. After calling PQconsumeInput,
the application may check PQisBusy and/or PQnotifies to see if their state
has changed.
PQconsumeInput may be called even if the application is not
prepared to deal with a result or notification just yet.
It will read available data and save it in a buffer, thereby
prepared to deal with a result or notification just yet. The
routine will read available data and save it in a buffer, thereby
causing a select(2) read-ready indication to go away. The
application can thus use PQconsumeInput to clear the select
condition immediately, and then examine the results at leisure.
@ -958,14 +956,17 @@ or the backend is not currently processing a query.
<Sect1>
<Title>Fast Path</Title>
<Para>
<ProductName>Postgres</ProductName> provides a fast path interface to send
function calls to the backend. This is a trapdoor into system internals and
can be a potential security hole. Most users will not need this feature.
<Para>
<ItemizedList>
<ListItem>
<Para>
<ProductName>Postgres</ProductName> provides a fast path interface to send function
calls to the backend. This is a trapdoor into
system internals and can be a potential security hole.
Most users will not need this feature.
<Function>PQfn</Function>
Request execution of a backend function via the fast path interface.
<synopsis>
PGresult* PQfn(PGconn* conn,
int fnid,
@ -979,12 +980,15 @@ PGresult* PQfn(PGconn* conn,
executed.
result_buf is the buffer in which
to place the return value. The caller must have allocated
sufficient space to store the return value. The
result length will be returned in the storage pointed
to by result_len. If the result is to be an integer
value, than result_is_int should be set to 1; otherwise
it should be set to 0. args and nargs specify the
arguments to the function.
sufficient space to store the return value (there is no check!).
The actual result length will be returned in the integer pointed
to by result_len. If a 4-byte integer result is expected, set
result_is_int to 1; otherwise set it to 0. (Setting result_is_int to 1
tells libpq to byte-swap the value if necessary, so that it is
delivered as a proper int value for the client machine. When
result_is_int is 0, the byte string sent by the backend is returned
unmodified.)
args and nargs specify the arguments to be passed to the function.
<synopsis>
typedef struct {
int len;
@ -1037,9 +1041,19 @@ messages can be detected by calling PQnotifies().
removed from the list of notifications.
<synopsis>
PGnotify* PQnotifies(PGconn *conn);
typedef struct pgNotify
{
char relname[NAMEDATALEN]; /* name of relation
* containing data */
int be_pid; /* process id of backend */
} PGnotify;
</synopsis>
After processing a PGnotify object returned by PQnotifies,
be sure to free it with free() to avoid a memory leak.
NOTE: in <productname>Postgres</productname> 6.4 and later,
the be_pid is the notifying backend's, whereas in earlier versions
it was always your own backend's PID.
</Para>
</ListItem>
</ItemizedList>
@ -1307,7 +1321,7 @@ defaultNoticeProcessor(void * arg, const char * message)
<Para>
To use a special notice processor, call <function>PQsetNoticeProcessor</function> just after
any creation of a new PGconn object.
creation of a new PGconn object.
</Sect1>
@ -1565,8 +1579,8 @@ main()
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '&percnt;s' failed.\n", dbName);
fprintf(stderr, "&percnt;s", PQerrorMessage(conn));
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
@ -1612,14 +1626,14 @@ main()
/* first, print out the attribute names */
nFields = PQnfields(res);
for (i = 0; i &lt; nFields; i++)
printf("&percnt;-15s", PQfname(res, i));
printf("%-15s", PQfname(res, i));
printf("\n\n");
/* next, print out the instances */
for (i = 0; i &lt; PQntuples(res); i++)
{
for (j = 0; j &lt; nFields; j++)
printf("&percnt;-15s", PQgetvalue(res, i, j));
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
@ -1713,8 +1727,8 @@ main()
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '&percnt;s' failed.\n", dbName);
fprintf(stderr, "&percnt;s", PQerrorMessage(conn));
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
@ -1746,7 +1760,7 @@ main()
while ((notify = PQnotifies(conn)) != NULL)
{
fprintf(stderr,
"ASYNC NOTIFY of '&percnt;s' from backend pid '&percnt;d' received\n",
"ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
notify-&gt;relname, notify-&gt;be_pid);
free(notify);
}
@ -1841,8 +1855,8 @@ main()
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '&percnt;s' failed.\n", dbName);
fprintf(stderr, "&percnt;s", PQerrorMessage(conn));
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
@ -1888,7 +1902,7 @@ main()
for (i = 0; i &lt; 3; i++)
{
printf("type[&percnt;d] = &percnt;d, size[&percnt;d] = &percnt;d\n",
printf("type[%d] = %d, size[%d] = %d\n",
i, PQftype(res, i),
i, PQfsize(res, i));
}
@ -1910,13 +1924,13 @@ main()
*/
pval = (POLYGON *) malloc(plen + VARHDRSZ);
pval-&gt;size = plen;
memmove((char *) &pval-&gt;npts, PQgetvalue(res, i, p_fnum), plen);
printf("tuple &percnt;d: got\n", i);
printf(" i = (&percnt;d bytes) &percnt;d,\n",
memmove((char *) &amp;pval-&gt;npts, PQgetvalue(res, i, p_fnum), plen);
printf("tuple %d: got\n", i);
printf(" i = (%d bytes) %d,\n",
PQgetlength(res, i, i_fnum), *ival);
printf(" d = (&percnt;d bytes) &percnt;f,\n",
printf(" d = (%d bytes) %f,\n",
PQgetlength(res, i, d_fnum), *dval);
printf(" p = (&percnt;d bytes) &percnt;d points \tboundbox = (hi=&percnt;f/&percnt;f, lo = &percnt;f,&percnt;f)\n",
printf(" p = (%d bytes) %d points \tboundbox = (hi=%f/%f, lo = %f,%f)\n",
PQgetlength(res, i, d_fnum),
pval-&gt;npts,
pval-&gt;boundbox.xh,

View File

@ -284,7 +284,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
*/
fd = open(filename, O_RDONLY, 0666);
if (fd &lt; 0) { /* error */
fprintf(stderr, "can't open unix file
fprintf(stderr, "can't open unix file %s\n", filename);
}
/*
@ -292,7 +292,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
*/
lobjId = lo_creat(conn, INV_READ|INV_WRITE);
if (lobjId == 0) {
fprintf(stderr, "can't create large object");
fprintf(stderr, "can't create large object\n");
}
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@ -302,7 +302,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
while ((nbytes = read(fd, buf, BUFSIZE)) &gt; 0) {
tmp = lo_write(conn, lobj_fd, buf, nbytes);
if (tmp &lt; nbytes) {
fprintf(stderr, "error while reading
fprintf(stderr, "error while reading large object\n");
}
}
@ -321,7 +321,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
lobj_fd = lo_open(conn, lobjId, INV_READ);
if (lobj_fd &lt; 0) {
fprintf(stderr,"can't open large object %d",
fprintf(stderr,"can't open large object %d\n",
lobjId);
}
@ -335,7 +335,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
fprintf(stderr,"&gt;&gt;&gt; %s", buf);
nread += nbytes;
}
fprintf(stderr,"0);
fprintf(stderr,"\n");
lo_close(conn, lobj_fd);
}
@ -349,7 +349,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
lobj_fd = lo_open(conn, lobjId, INV_READ);
if (lobj_fd &lt; 0) {
fprintf(stderr,"can't open large object %d",
fprintf(stderr,"can't open large object %d\n",
lobjId);
}
@ -365,7 +365,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
nbytes = lo_write(conn, lobj_fd, buf + nwritten, len - nwritten);
nwritten += nbytes;
}
fprintf(stderr,"0);
fprintf(stderr,"\n");
lo_close(conn, lobj_fd);
}
@ -385,7 +385,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
*/
lobj_fd = lo_open(conn, lobjId, INV_READ);
if (lobj_fd &lt; 0) {
fprintf(stderr,"can't open large object %d",
fprintf(stderr,"can't open large object %d\n",
lobjId);
}
@ -394,7 +394,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
*/
fd = open(filename, O_CREAT|O_WRONLY, 0666);
if (fd &lt; 0) { /* error */
fprintf(stderr, "can't open unix file
fprintf(stderr, "can't open unix file %s\n",
filename);
}
@ -404,7 +404,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) &gt; 0) {
tmp = write(fd, buf, nbytes);
if (tmp &lt; nbytes) {
fprintf(stderr,"error while writing
fprintf(stderr,"error while writing %s\n",
filename);
}
}
@ -432,7 +432,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
PGresult *res;
if (argc != 4) {
fprintf(stderr, "Usage: %s database_name in_filename out_filename0,
fprintf(stderr, "Usage: %s database_name in_filename out_filename\n",
argv[0]);
exit(1);
}
@ -448,7 +448,7 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD) {
fprintf(stderr,"Connection to database '%s' failed.0, database);
fprintf(stderr,"Connection to database '%s' failed.\n", database);
fprintf(stderr,"%s",PQerrorMessage(conn));
exit_nicely(conn);
}
@ -456,20 +456,20 @@ SELECT lo_export(image.raster, "/tmp/motd") from image
res = PQexec(conn, "begin");
PQclear(res);
printf("importing file
printf("importing file %s\n", in_filename);
/* lobjOid = importFile(conn, in_filename); */
lobjOid = lo_import(conn, in_filename);
/*
printf("as large object %d.0, lobjOid);
printf("as large object %d.\n", lobjOid);
printf("picking out bytes 1000-2000 of the large object0);
printf("picking out bytes 1000-2000 of the large object\n");
pickout(conn, lobjOid, 1000, 1000);
printf("overwriting bytes 1000-2000 of the large object with X's0);
printf("overwriting bytes 1000-2000 of the large object with X's\n");
overwrite(conn, lobjOid, 1000, 1000);
*/
printf("exporting large object to file
printf("exporting large object to file %s\n", out_filename);
/* exportFile(conn, lobjOid, out_filename); */
lo_export(conn, lobjOid,out_filename);

View File

@ -691,13 +691,14 @@ AsciiRow (B)
</Term>
<ListItem>
<Para>
A bit map with one bit for each field in the row. The 1st
field corresponds to bit 7 of the 1st byte, the 2nd field
corresponds to bit 6 of the 1st byte, the 8th field corresponds
to bit 0 of the 1st byte, the 9th field corresponds to bit 8 of
the 2nd byte, and so on. The bit is set if the value of the
corresponding field is not NULL.
field corresponds to bit 7 (MSB) of the 1st byte, the 2nd
field corresponds to bit 6 of the 1st byte, the 8th field
corresponds to bit 0 (LSB) of the 1st byte, the 9th field
corresponds to bit 7 of the 2nd byte, and so on. Each bit
is set if the value of the corresponding field is not NULL.
If the number of fields is not a multiple of 8, the remainder
of the last byte in the bit map is wasted.
</Para>
<Para>
Then, for each field with a non-NULL value, there is the following:
@ -720,7 +721,10 @@ AsciiRow (B)
<ListItem>
<Para>
Specifies the value of the field itself in <Acronym>ASCII</Acronym>
characters. <Replaceable>n</Replaceable> is the above size minus 4.
characters. <Replaceable>n</Replaceable> is the above
size minus 4.
There is no trailing '\0' in the field data; the front
end must add one if it wants one.
</Para>
</ListItem>
</VarListEntry>
@ -985,11 +989,13 @@ BinaryRow (B)
<ListItem>
<Para>
A bit map with one bit for each field in the row. The 1st
field corresponds to bit 7 of the 1st byte, the 2nd field
corresponds to bit 6 of the 1st byte, the 8th field corresponds
to bit 0 of the 1st byte, the 9th field corresponds to bit 8 of
the 2nd byte, and so on. The bit is set if the value of the
corresponding field is not NULL.
field corresponds to bit 7 (MSB) of the 1st byte, the 2nd
field corresponds to bit 6 of the 1st byte, the 8th field
corresponds to bit 0 (LSB) of the 1st byte, the 9th field
corresponds to bit 7 of the 2nd byte, and so on. Each bit
is set if the value of the corresponding field is not NULL.
If the number of fields is not a multiple of 8, the remainder
of the last byte in the bit map is wasted.
</Para>
<Para>
Then, for each field with a non-NULL value, there is the following:
@ -1561,7 +1567,7 @@ NotificationResponse (B)
</Term>
<ListItem>
<Para>
The process ID of the backend process.
The process ID of the notifying backend process.
</Para>
</ListItem>
</VarListEntry>
@ -1571,7 +1577,7 @@ NotificationResponse (B)
</Term>
<ListItem>
<Para>
The name of the relation that the notify has been raised on.
The name of the condition that the notify has been raised on.
</Para>
</ListItem>
</VarListEntry>
@ -1664,7 +1670,7 @@ RowDescription (B)
</Term>
<ListItem>
<Para>
Specifies the number of fields in a row (and may be zero).
Specifies the number of fields in a row (may be zero).
</Para>
<Para>
Then, for each field, there is the following:
@ -1756,7 +1762,7 @@ StartupPacket (F)
</Term>
<ListItem>
<Para>
The database name, defaults to the user name if omitted.
The database name, defaults to the user name if empty.
</Para>
</ListItem>
</VarListEntry>

View File

@ -73,6 +73,9 @@ Acknowledgement that notify command has executed.
</PARA>
</LISTITEM>
</VARLISTENTRY>
</variablelist>
</LISTITEM>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
Notify events
@ -84,9 +87,6 @@ application reacts depends on its programming.
</PARA>
</LISTITEM>
</VARLISTENTRY>
</variablelist>
</LISTITEM>
</VARLISTENTRY>
</VARIABLELIST>
</REFSECT2>
</REFSYNOPSISDIV>

View File

@ -104,7 +104,7 @@ The backend does not complain if you UNLISTEN something you were not
listening for.
<para>
Each backend will automatically execute <command>UNLISTEN "*"</command> when
Each backend will automatically execute <command>UNLISTEN *</command> when
exiting.
<para>

View File

@ -27,7 +27,7 @@ to this guide when the installation is complete.
<Para>
Throughout this manual, any examples that begin with
the character <Quote>&percnt</Quote> are commands that should be typed
the character <Quote>%</Quote> are commands that should be typed
at the UNIX shell prompt. Examples that begin with the
character <Quote>*</Quote> are commands in the Postgres query
language, Postgres <Acronym>SQL</Acronym>.

View File

@ -51,7 +51,7 @@
{
double x, y;
Complex *result;
if (sscanf(str, " ( &percnt;lf , &percnt;lf )", &amp;x, &amp;y) != 2) {
if (sscanf(str, " ( %lf , %lf )", &amp;x, &amp;y) != 2) {
elog(WARN, "complex_in: error in parsing
return NULL;
}
@ -71,7 +71,7 @@
if (complex == NULL)
return(NULL);
result = (char *) palloc(60);
sprintf(result, "(&percnt;g,&percnt;g)", complex-&gt;x, complex-&gt;y);
sprintf(result, "(%g,%g)", complex-&gt;x, complex-&gt;y);
return(result);
}
</ProgramListing>