Commit ab35b082 authored by Thomas G. Lockhart's avatar Thomas G. Lockhart

Expunge "UNIX" in favor of "Unix".

A few other changes, but I forget what :(
parent d0741fb4
...@@ -282,7 +282,7 @@ SELECT name, population ...@@ -282,7 +282,7 @@ SELECT name, population
<note> <note>
<para> <para>
On UNIX systems, this is always midnight, January 1, 1970 GMT. On Unix systems, this is always midnight, January 1, 1970 GMT.
</para> </para>
</note> </note>
</para> </para>
......
...@@ -174,7 +174,7 @@ ...@@ -174,7 +174,7 @@
<para> <para>
The <firstterm>parser</firstterm> defined in The <firstterm>parser</firstterm> defined in
<filename>gram.y</filename> and <filename>scan.l</filename> is <filename>gram.y</filename> and <filename>scan.l</filename> is
built using the UNIX tools <application>yacc</application> built using the Unix tools <application>yacc</application>
and <application>lex</application>. and <application>lex</application>.
</para> </para>
</listitem> </listitem>
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
The parser has to check the query string (which arrives as The parser has to check the query string (which arrives as
plain ASCII text) for valid syntax. If the syntax is correct a plain ASCII text) for valid syntax. If the syntax is correct a
<firstterm>parse tree</firstterm> is built up and handed back otherwise an error is <firstterm>parse tree</firstterm> is built up and handed back otherwise an error is
returned. For the implementation the well known UNIX returned. For the implementation the well known Unix
tools <application>lex</application> and <application>yacc</application> tools <application>lex</application> and <application>yacc</application>
are used. are used.
</para> </para>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
somewhat clearer. somewhat clearer.
In database jargon, <ProductName>Postgres</ProductName> uses a simple "process In database jargon, <ProductName>Postgres</ProductName> uses a simple "process
per-user" client/server model. A <ProductName>Postgres</ProductName> session per-user" client/server model. A <ProductName>Postgres</ProductName> session
consists of the following cooperating UNIX processes (programs): consists of the following cooperating Unix processes (programs):
<ItemizedList> <ItemizedList>
<ListItem> <ListItem>
...@@ -75,7 +75,7 @@ Note that the <ProductName>Postgres</ProductName> superuser does not ...@@ -75,7 +75,7 @@ Note that the <ProductName>Postgres</ProductName> superuser does not
have to be a special user (e.g., a user named have to be a special user (e.g., a user named
"postgres"), although many systems are installed that way. "postgres"), although many systems are installed that way.
Furthermore, the <ProductName>Postgres</ProductName> superuser should Furthermore, the <ProductName>Postgres</ProductName> superuser should
definitely not be the UNIX superuser, "root"! In any definitely not be the Unix superuser, "root"! In any
case, all files relating to a database should belong to case, all files relating to a database should belong to
this <ProductName>Postgres</ProductName> superuser. this <ProductName>Postgres</ProductName> superuser.
</Para> </Para>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
somewhat clearer. somewhat clearer.
In database jargon, <ProductName>Postgres</ProductName> uses a simple "process In database jargon, <ProductName>Postgres</ProductName> uses a simple "process
per-user" client/server model. A <ProductName>Postgres</ProductName> session per-user" client/server model. A <ProductName>Postgres</ProductName> session
consists of the following cooperating UNIX processes (programs): consists of the following cooperating Unix processes (programs):
</Para> </Para>
<ItemizedList> <ItemizedList>
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
have to be a special user (e.g., a user named have to be a special user (e.g., a user named
"postgres"). Furthermore, the <ProductName>Postgres</ProductName> superuser "postgres"). Furthermore, the <ProductName>Postgres</ProductName> superuser
should should
definitely not be the UNIX superuser ("root")! In any definitely not be the Unix superuser ("root")! In any
case, all files relating to a database should belong to case, all files relating to a database should belong to
this <ProductName>Postgres</ProductName> superuser. this <ProductName>Postgres</ProductName> superuser.
</Para> </Para>
......
This diff is collapsed.
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v 1.18 1999/07/06 17:19:41 thomas Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v 1.19 1999/10/04 15:18:53 thomas Exp $
Documentation Guide Documentation Guide
Thomas Lockhart Thomas Lockhart
...@@ -1334,7 +1334,7 @@ but it is almost certainly a good candidate for use. ...@@ -1334,7 +1334,7 @@ but it is almost certainly a good candidate for use.
<itemizedlist> <itemizedlist>
<listitem><para>A working installation of GCC 2.7.2</para></listitem> <listitem><para>A working installation of GCC 2.7.2</para></listitem>
<listitem><para>A working installation of Emacs 19.19 or later</para></listitem> <listitem><para>A working installation of Emacs 19.19 or later</para></listitem>
<listitem><para>An unzip program for UNIX to unpack things</para></listitem> <listitem><para>An unzip program for Unix to unpack things</para></listitem>
</itemizedlist> </itemizedlist>
</para> </para>
......
...@@ -42,7 +42,7 @@ $ export PATH ...@@ -42,7 +42,7 @@ $ export PATH
variable</Quote> or <Quote>setting an environment variable</Quote> throughout variable</Quote> or <Quote>setting an environment variable</Quote> throughout
this document. If you did not fully understand the this document. If you did not fully understand the
last paragraph on modifying your search path, you last paragraph on modifying your search path, you
should consult the UNIX manual pages that describe your should consult the Unix manual pages that describe your
shell before going any further. shell before going any further.
</Para> </Para>
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</para> </para>
<para> <para>
We assume proficiency with UNIX and C programming. We assume proficiency with Unix and C programming.
</para> </para>
&info; &info;
......
...@@ -41,7 +41,7 @@ export PATH ...@@ -41,7 +41,7 @@ export PATH
variable" or "setting an environment variable" throughout variable" or "setting an environment variable" throughout
this document. If you did not fully understand the this document. If you did not fully understand the
last paragraph on modifying your search path, you last paragraph on modifying your search path, you
should consult the UNIX manual pages that describe your should consult the Unix manual pages that describe your
shell before going any further. shell before going any further.
</Para> </Para>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</para> </para>
<para> <para>
<acronym>UNIX</acronym> is a trademark of X/Open, Ltd. Sun4, SPARC, SunOS <acronym>Unix</acronym> is a trademark of X/Open, Ltd. Sun4, SPARC, SunOS
and Solaris are trademarks of Sun Microsystems, Inc. DEC, and Solaris are trademarks of Sun Microsystems, Inc. DEC,
DECstation, Alpha AXP and ULTRIX are trademarks of Digital DECstation, Alpha AXP and ULTRIX are trademarks of Digital
Equipment Corp. PA-RISC and HP-UX are trademarks of Equipment Corp. PA-RISC and HP-UX are trademarks of
......
...@@ -13,19 +13,19 @@ ...@@ -13,19 +13,19 @@
oriented access to user data that has been declared to oriented access to user data that has been declared to
be a large type. be a large type.
This section describes the implementation and the This section describes the implementation and the
programmatic and query language interfaces to programming and query language interfaces to
<productname>Postgres</productname> <productname>Postgres</productname>
large object data. large object data.
</para> </para>
<sect1> <sect1>
<title>Historical Note</title> <title>Historical Note</title>
<para> <para>
Originally, <productname>Postgres 4.2</productname> supported three standard Originally, <productname>Postgres 4.2</productname> supported three standard
implementations of large objects: as files external implementations of large objects: as files external
to <productname>Postgres</productname>, as to <productname>Postgres</productname>, as
<acronym>ym>U</acronym>ym> files managed by <productname>Postgres</productname>, and as data external files managed by <productname>Postgres</productname>, and as data
stored within the <productname>Postgres</productname> database. It causes stored within the <productname>Postgres</productname> database. It causes
considerable confusion among users. As a result, we only considerable confusion among users. As a result, we only
support large objects as data stored within the <productname>Postgres</productname> support large objects as data stored within the <productname>Postgres</productname>
...@@ -35,39 +35,49 @@ ...@@ -35,39 +35,49 @@
Inversion large objects. (We will use Inversion and large Inversion large objects. (We will use Inversion and large
objects interchangeably to mean the same thing in this objects interchangeably to mean the same thing in this
section.) section.)
</para> </para>
</sect1> </sect1>
<sect1> <sect1>
<title>Inversion Large Objects</title> <title>Implementation Features</title>
<para> <para>
The Inversion large object implementation breaks large The Inversion large object implementation breaks large
objects up into "chunks" and stores the chunks in objects up into "chunks" and stores the chunks in
tuples in the database. A B-tree index guarantees fast tuples in the database. A B-tree index guarantees fast
searches for the correct chunk number when doing random searches for the correct chunk number when doing random
access reads and writes. access reads and writes.
</para> </para>
</sect1> </sect1>
<sect1> <sect1>
<title>Large Object Interfaces</title> <title>Interfaces</title>
<para> <para>
The facilities <productname>Postgres</productname> provides to access large The facilities <productname>Postgres</productname> provides to
objects, both in the backend as part of user-defined access large objects, both in the backend as part of user-defined
functions or the front end as part of an application functions or the front end as part of an application
using the interface, are described below. (For users using the interface, are described below. For users
familiar with <productname>Postgres 4.2</productname>, familiar with <productname>Postgres 4.2</productname>,
<productname>PostgreSQL</productname> has a new set of <productname>PostgreSQL</productname> has a new set of
functions providing a more coherent interface. The functions providing a more coherent interface.
interface is the same for dynamically-loaded C
functions as well as for XXX LOST TEXT? WHAT SHOULD GO HERE??.
<note>
<para>
All large object manipulation <emphasis>must</emphasis> take
place within an SQL transaction. This requirement is strictly
enforced as of Postgres v6.5, though it has been an
implicit requirement in previous versions, resulting in
misbehavior if ignored.
</para>
</note>
</para>
<para>
The <productname>Postgres</productname> large object interface is modeled after The <productname>Postgres</productname> large object interface is modeled after
the <acronym>UNIX</acronym> file system interface, with analogues of the <acronym>Unix</acronym> file system interface, with analogues of
<function>open(2)</function>, <function>read(2)</function>, <function>open(2)</function>, <function>read(2)</function>,
<function>write(2)</function>, <function>write(2)</function>,
<function>lseek(2)</function>, etc. User <function>lseek(2)</function>, etc. User
functions call these routines to retrieve only the data of functions call these routines to retrieve only the data of
interest from a large object. For example, if a large interest from a large object. For example, if a large
...@@ -83,26 +93,27 @@ ...@@ -83,26 +93,27 @@
library. <productname>Postgres</productname> provides a set of routines that library. <productname>Postgres</productname> provides a set of routines that
support opening, reading, writing, closing, and seeking on support opening, reading, writing, closing, and seeking on
large objects. large objects.
</para> </para>
<sect2> <sect2>
<title>Creating a Large Object</title> <title>Creating a Large Object</title>
<para> <para>
The routine The routine
<programlisting>
Oid lo_creat(PGconn *conn, int mode) <synopsis>
</programlisting> Oid lo_creat(PGconn *<replaceable class="parameter">conn</replaceable>, int <replaceable class="parameter">mode</replaceable>)
creates a new large object. The mode is a bitmask </synopsis>
creates a new large object.
<replaceable class="parameter">mode</replaceable> is a bitmask
describing several different attributes of the new describing several different attributes of the new
object. The symbolic constants listed here are defined object. The symbolic constants listed here are defined
in in
<filename> <filename>$<envar>PGROOT</envar>/src/backend/libpq/libpq-fs.h</filename>
PGROOT/src/backend/libpq/libpq-fs.h
</filename>
The access type (read, write, or both) is controlled by The access type (read, write, or both) is controlled by
OR ing together the bits <acronym>INV_READ</acronym> and OR ing together the bits <acronym>INV_READ</acronym> and
<acronym>INV_WRITE</acronym>. If <acronym>INV_WRITE</acronym>. If
the large object should be archived -- that is, if the large object should be archived -- that is, if
historical versions of it should be moved periodically to historical versions of it should be moved periodically to
a special archive relation -- then the <acronym>INV_ARCHIVE</acronym> bit a special archive relation -- then the <acronym>INV_ARCHIVE</acronym> bit
...@@ -111,45 +122,45 @@ PGROOT/src/backend/libpq/libpq-fs.h ...@@ -111,45 +122,45 @@ PGROOT/src/backend/libpq/libpq-fs.h
should reside. For sites other than Berkeley, these should reside. For sites other than Berkeley, these
bits should always be zero. bits should always be zero.
The commands below create an (Inversion) large object: The commands below create an (Inversion) large object:
<programlisting> <programlisting>
inv_oid = lo_creat(INV_READ|INV_WRITE|INV_ARCHIVE); inv_oid = lo_creat(INV_READ|INV_WRITE|INV_ARCHIVE);
</programlisting> </programlisting>
</para> </para>
</sect2> </sect2>
<sect2> <sect2>
<title>Importing a Large Object</title> <title>Importing a Large Object</title>
<para> <para>
To import a <acronym>UNIX</acronym> file as To import a Unix file as a large object, call
a large object, call <synopsis>
<programlisting> Oid lo_import(PGconn *<replaceable class="parameter">conn</replaceable>, text *<replaceable class="parameter">filename</replaceable>)
Oid lo_import(PGconn *conn, text *filename) </synopsis>
</programlisting> <replaceable class="parameter">filename</replaceable>
The filename argument specifies the <acronym>UNIX</acronym> pathname of specifies the <acronym>Unix</acronym> pathname of
the file to be imported as a large object. the file to be imported as a large object.
</para> </para>
</sect2> </sect2>
<sect2> <sect2>
<title>Exporting a Large Object</title> <title>Exporting a Large Object</title>
<para> <para>
To export a large object To export a large object
into <acronym>UNIX</acronym> file, call into <acronym>Unix</acronym> file, call
<programlisting> <synopsis>
int lo_export(PGconn *conn, Oid lobjId, text *filename) int lo_export(PGconn *<replaceable class="parameter">conn</replaceable>, Oid <replaceable class="parameter">lobjId</replaceable>, text *<replaceable class="parameter">filename</replaceable>)
</programlisting> </synopsis>
The lobjId argument specifies the Oid of the large The lobjId argument specifies the Oid of the large
object to export and the filename argument specifies object to export and the filename argument specifies
the <acronym>UNIX</acronym> pathname of the file. the <acronym>Unix</acronym> pathname of the file.
</para> </para>
</sect2> </sect2>
<sect2> <sect2>
<title>Opening an Existing Large Object</title> <title>Opening an Existing Large Object</title>
<para> <para>
To open an existing large object, call To open an existing large object, call
<programlisting> <programlisting>
int lo_open(PGconn *conn, Oid lobjId, int mode, ...) int lo_open(PGconn *conn, Oid lobjId, int mode, ...)
......
...@@ -116,7 +116,7 @@ You are currently connected to the database: <replaceable>dbname</replaceable> ...@@ -116,7 +116,7 @@ You are currently connected to the database: <replaceable>dbname</replaceable>
<replaceable>dbname</replaceable>=> \i <replaceable class="parameter">filename</replaceable> <replaceable>dbname</replaceable>=> \i <replaceable class="parameter">filename</replaceable>
</programlisting> </programlisting>
To get out of <application>psql</application> and return to UNIX, type To get out of <application>psql</application> and return to Unix, type
<programlisting> <programlisting>
<replaceable>dbname</replaceable>=&gt; \q <replaceable>dbname</replaceable>=&gt; \q
...@@ -140,13 +140,13 @@ You are currently connected to the database: <replaceable>dbname</replaceable> ...@@ -140,13 +140,13 @@ You are currently connected to the database: <replaceable>dbname</replaceable>
<para> <para>
If you are the database administrator for the database If you are the database administrator for the database
mydb, you can destroy it using the following UNIX command: mydb, you can destroy it using the following Unix command:
<programlisting> <programlisting>
% destroydb <replaceable class="parameter">dbname</replaceable> % destroydb <replaceable class="parameter">dbname</replaceable>
</programlisting> </programlisting>
This action physically removes all of the UNIX files This action physically removes all of the Unix files
associated with the database and cannot be undone, so associated with the database and cannot be undone, so
this should only be done with a great deal of forethought. this should only be done with a great deal of forethought.
</para> </para>
......
...@@ -243,7 +243,7 @@ mydb=> \g ...@@ -243,7 +243,7 @@ mydb=> \g
mydb=> \i fileName mydb=> \i fileName
</ProgramListing> </ProgramListing>
To get out of <Application>psql</Application> and return to UNIX, type To get out of <Application>psql</Application> and return to Unix, type
<ProgramListing> <ProgramListing>
mydb=> \q mydb=> \q
</ProgramListing> </ProgramListing>
...@@ -281,11 +281,11 @@ TBD ...@@ -281,11 +281,11 @@ TBD
<Para> <Para>
If you are the database administrator for the database If you are the database administrator for the database
<Database>mydb</Database>, you can destroy it using the following UNIX command: <Database>mydb</Database>, you can destroy it using the following Unix command:
<ProgramListing> <ProgramListing>
% destroydb mydb % destroydb mydb
</ProgramListing> </ProgramListing>
This action physically removes all of the UNIX files This action physically removes all of the Unix files
associated with the database and cannot be undone, so associated with the database and cannot be undone, so
this should only be done with a great deal of forethought. this should only be done with a great deal of forethought.
</Para> </Para>
......
...@@ -138,8 +138,8 @@ ...@@ -138,8 +138,8 @@
</para> </para>
<para> <para>
Connections from clients can be made using UNIX domain sockets or Internet Connections from clients can be made using Unix domain sockets or Internet
domain sockets (ie. TCP/IP). Connections made using UNIX domain sockets domain sockets (ie. TCP/IP). Connections made using Unix domain sockets
are controlled using records of the following format: are controlled using records of the following format:
<synopsis> <synopsis>
...@@ -158,7 +158,7 @@ local <replaceable>database</replaceable> <replaceable>authentication method</re ...@@ -158,7 +158,7 @@ local <replaceable>database</replaceable> <replaceable>authentication method</re
<member> <member>
<replaceable>authentication method</replaceable> <replaceable>authentication method</replaceable>
specifies the method a user must use to authenticate themselves when specifies the method a user must use to authenticate themselves when
connecting to that database using UNIX domain sockets. The different methods connecting to that database using Unix domain sockets. The different methods
are described below. are described below.
</member> </member>
</simplelist> </simplelist>
...@@ -199,7 +199,7 @@ host <replaceable>database</replaceable> <replaceable>TCP/IP address</replaceabl ...@@ -199,7 +199,7 @@ host <replaceable>database</replaceable> <replaceable>TCP/IP address</replaceabl
<title>Authentication Methods</title> <title>Authentication Methods</title>
<para> <para>
The following authentication methods are supported for both UNIX and TCP/IP The following authentication methods are supported for both Unix and TCP/IP
domain sockets: domain sockets:
<variablelist> <variablelist>
...@@ -299,7 +299,7 @@ host <replaceable>database</replaceable> <replaceable>TCP/IP address</replaceabl ...@@ -299,7 +299,7 @@ host <replaceable>database</replaceable> <replaceable>TCP/IP address</replaceabl
<para> <para>
<programlisting> <programlisting>
# Trust any connection via UNIX domain sockets. # Trust any connection via Unix domain sockets.
local trust local trust
# Trust any connection via TCP/IP from this machine. # Trust any connection via TCP/IP from this machine.
host all 127.0.0.1 255.255.255.255 trust host all 127.0.0.1 255.255.255.255 trust
......
...@@ -13,7 +13,7 @@ How to begin work with <ProductName>Postgres</ProductName> for a new user. ...@@ -13,7 +13,7 @@ How to begin work with <ProductName>Postgres</ProductName> for a new user.
the site database administrator. This site administrator the site database administrator. This site administrator
is the person who installed the software, created is the person who installed the software, created
the database directories and started the <Application>postmaster</Application> the database directories and started the <Application>postmaster</Application>
process. This person does not have to be the UNIX process. This person does not have to be the Unix
superuser (<Quote>root</Quote>) superuser (<Quote>root</Quote>)
or the computer system administrator; a person can install and use or the computer system administrator; a person can install and use
<ProductName>Postgres</ProductName> without any special accounts or privileges. <ProductName>Postgres</ProductName> without any special accounts or privileges.
...@@ -28,7 +28,7 @@ to this guide when the installation is complete. ...@@ -28,7 +28,7 @@ to this guide when the installation is complete.
<Para> <Para>
Throughout this manual, any examples that begin with Throughout this manual, any examples that begin with
the character <Quote>%</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 at the Unix shell prompt. Examples that begin with the
character <Quote>*</Quote> are commands in the Postgres query character <Quote>*</Quote> are commands in the Postgres query
language, Postgres <Acronym>SQL</Acronym>. language, Postgres <Acronym>SQL</Acronym>.
</Para> </Para>
...@@ -77,7 +77,7 @@ of a client application is the interactive monitor <Application>psql</Applicatio ...@@ -77,7 +77,7 @@ of a client application is the interactive monitor <Application>psql</Applicatio
variable</Quote> or <Quote>setting an environment variable</Quote> throughout variable</Quote> or <Quote>setting an environment variable</Quote> throughout
this document. If you did not fully understand the this document. If you did not fully understand the
last paragraph on modifying your search path, you last paragraph on modifying your search path, you
should consult the UNIX manual pages that describe your should consult the Unix manual pages that describe your
shell before going any further. shell before going any further.
</Para> </Para>
...@@ -282,7 +282,7 @@ mydb=> \g ...@@ -282,7 +282,7 @@ mydb=> \g
mydb=> \i fileName mydb=> \i fileName
</ProgramListing> </ProgramListing>
To get out of <Application>psql</Application> and return to UNIX, type To get out of <Application>psql</Application> and return to Unix, type
<ProgramListing> <ProgramListing>
mydb=> \q mydb=> \q
</ProgramListing> </ProgramListing>
...@@ -303,11 +303,11 @@ mydb=> \q ...@@ -303,11 +303,11 @@ mydb=> \q
<Para> <Para>
If you are the database administrator for the database If you are the database administrator for the database
<Database>mydb</Database>, you can destroy it using the following UNIX command: <Database>mydb</Database>, you can destroy it using the following Unix command:
<ProgramListing> <ProgramListing>
% destroydb mydb % destroydb mydb
</ProgramListing> </ProgramListing>
This action physically removes all of the UNIX files This action physically removes all of the Unix files
associated with the database and cannot be undone, so associated with the database and cannot be undone, so
this should only be done with a great deal of forethought. this should only be done with a great deal of forethought.
</Para> </Para>
......
...@@ -116,7 +116,7 @@ select function hobbies (EMP) returns set of HOBBIES ...@@ -116,7 +116,7 @@ select function hobbies (EMP) returns set of HOBBIES
<para> <para>
The simplest possible <acronym>SQL</acronym> function has no arguments and The simplest possible <acronym>SQL</acronym> function has no arguments and
simply returns a base type, such as <acronym>int4</acronym>: simply returns a base type, such as <literal>int4</literal>:
<programlisting> <programlisting>
CREATE FUNCTION one() RETURNS int4 CREATE FUNCTION one() RETURNS int4
...@@ -291,10 +291,11 @@ WARN::function declared to return type EMP does not retrieve (EMP.*) ...@@ -291,10 +291,11 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
<para> <para>
Any collection of commands in the <acronym>SQL</acronym> query Any collection of commands in the <acronym>SQL</acronym> query
language can be packaged together and defined as a function. language can be packaged together and defined as a function.
The commands can include updates (i.e., <acronym>insert</acronym>, The commands can include updates (i.e.,
<acronym>update</acronym> and <acronym>delete</acronym>) as well <command>INSERT</command>, <command>UPDATE</command>, and
as <acronym>select</acronym> queries. However, the final command <command>DELETE</command>) as well
must be a <acronym>select</acronym> that returns whatever is as <command>SELECT</command> queries. However, the final command
must be a <command>SELECT</command> that returns whatever is
specified as the function's returntype. specified as the function's returntype.
<programlisting> <programlisting>
...@@ -392,7 +393,7 @@ WARN::function declared to return type EMP does not retrieve (EMP.*) ...@@ -392,7 +393,7 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
code file for the function, bracketed by quotation marks. If a code file for the function, bracketed by quotation marks. If a
link symbol is used in the AS clause, the link symbol should also be link symbol is used in the AS clause, the link symbol should also be
bracketed by single quotation marks, and should be exactly the bracketed by single quotation marks, and should be exactly the
same as the name of the function in the C source code. On UNIX systems same as the name of the function in the C source code. On Unix systems
the command <command>nm</command> will print all of the link the command <command>nm</command> will print all of the link
symbols in a dynamically loadable object. symbols in a dynamically loadable object.
(<productname>Postgres</productname> will not compile a function (<productname>Postgres</productname> will not compile a function
...@@ -608,12 +609,12 @@ WARN::function declared to return type EMP does not retrieve (EMP.*) ...@@ -608,12 +609,12 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
only passes integer types by value. You should be careful only passes integer types by value. You should be careful
to define your types such that they will be the same to define your types such that they will be the same
size (in bytes) on all architectures. For example, the size (in bytes) on all architectures. For example, the
<acronym>long</acronym> type is dangerous because it <literal>long</literal> type is dangerous because it
is 4 bytes on some machines and 8 bytes on others, whereas is 4 bytes on some machines and 8 bytes on others, whereas
<acronym>int</acronym> type is 4 bytes on most <literal>int</literal> type is 4 bytes on most
<acronym>UNIX</acronym> machines (though not on most Unix machines (though not on most
personal computers). A reasonable implementation of personal computers). A reasonable implementation of
the <acronym>int4</acronym> type on <acronym>UNIX</acronym> the <literal>int4</literal> type on Unix
machines might be: machines might be:
<programlisting> <programlisting>
...@@ -779,7 +780,7 @@ memmove(destination-&gt;data, buffer, 40); ...@@ -779,7 +780,7 @@ memmove(destination-&gt;data, buffer, 40);
a procedural interface for accessing fields of composite types a procedural interface for accessing fields of composite types
from C. As <productname>Postgres</productname> processes from C. As <productname>Postgres</productname> processes
a set of instances, each instance will be passed into your a set of instances, each instance will be passed into your
function as an opaque structure of type <acronym>TUPLE</acronym>. function as an opaque structure of type <literal>TUPLE</literal>.
Suppose we want to write a function to answer the query Suppose we want to write a function to answer the query
<programlisting> <programlisting>
...@@ -809,16 +810,16 @@ memmove(destination-&gt;data, buffer, 40); ...@@ -809,16 +810,16 @@ memmove(destination-&gt;data, buffer, 40);
</para> </para>
<para> <para>
<acronym>GetAttributeByName</acronym> is the <function>GetAttributeByName</function> is the
<productname>Postgres</productname> system function that <productname>Postgres</productname> system function that
returns attributes out of the current instance. It has returns attributes out of the current instance. It has
three arguments: the argument of type TUPLE passed into three arguments: the argument of type TUPLE passed into
the function, the name of the desired attribute, and a the function, the name of the desired attribute, and a
return parameter that describes whether the attribute return parameter that describes whether the attribute
is null. <acronym>GetAttributeByName</acronym> will is null. <function>GetAttributeByName</function> will
align data properly so you can cast its return value to align data properly so you can cast its return value to
the desired type. For example, if you have an attribute the desired type. For example, if you have an attribute
name which is of the type name, the <acronym>GetAttributeByName</acronym> name which is of the type name, the <function>GetAttributeByName</function>
call would look like: call would look like:
<programlisting> <programlisting>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment