Expunge "UNIX" in favor of "Unix".

A few other changes, but I forget what :(
This commit is contained in:
Thomas G. Lockhart 1999-10-04 15:18:54 +00:00
parent d0741fb42f
commit ab35b0822b
16 changed files with 388 additions and 363 deletions

View File

@ -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>

View File

@ -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 @@
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>

View File

@ -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
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>

View File

@ -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 @@
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>

View File

@ -113,6 +113,8 @@ procedure.
link-editing required before you can load your user-defined link-editing required before you can load your user-defined
functions into a running <productname>Postgres</productname> server. Note that functions into a running <productname>Postgres</productname> server. Note that
this process has changed as of Version 4.2. this process has changed as of Version 4.2.
<!--
<tip> <tip>
<para> <para>
The old <productname>Postgres</productname> dynamic The old <productname>Postgres</productname> dynamic
@ -126,7 +128,7 @@ the dynamic loading mechanism provided by the operating
system. This approach is generally faster, more reliable and system. This approach is generally faster, more reliable and
more portable than our previous dynamic loading mechanism. more portable than our previous dynamic loading mechanism.
The reason for this is that nearly all modern versions of The reason for this is that nearly all modern versions of
UNIX use a dynamic loading mechanism to implement shared Unix use a dynamic loading mechanism to implement shared
libraries and must therefore provide a fast and reliable libraries and must therefore provide a fast and reliable
mechanism. On the other hand, the object file must be mechanism. On the other hand, the object file must be
postprocessed a bit before it can be loaded into <productname>Postgres</productname>. We postprocessed a bit before it can be loaded into <productname>Postgres</productname>. We
@ -135,6 +137,8 @@ make up for the slight decrease in convenience.
</para> </para>
</tip> </tip>
</para> </para>
-->
<para> <para>
You should expect to read (and reread, and re-reread) the You should expect to read (and reread, and re-reread) the
manual pages for the C compiler, cc(1), and the link manual pages for the C compiler, cc(1), and the link
@ -143,7 +147,11 @@ make up for the slight decrease in convenience.
<filename>PGROOT/src/regress</filename> contain several <filename>PGROOT/src/regress</filename> contain several
working examples of this process. If you copy what these working examples of this process. If you copy what these
tests do, you should not have any problems. tests do, you should not have any problems.
</para>
<para>
The following terminology will be used below: The following terminology will be used below:
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
@ -180,6 +188,7 @@ Paths given to the create function command must be
absolute paths (i.e., start with "/") that refer to absolute paths (i.e., start with "/") that refer to
directories visible on the machine on which the directories visible on the machine on which the
<productname>Postgres</productname> server is running. <productname>Postgres</productname> server is running.
<tip> <tip>
<para> <para>
Relative paths do in fact work, Relative paths do in fact work,
@ -193,6 +202,7 @@ could be running on a completely different machine!
</tip> </tip>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <productname>Postgres</productname> user must be able to traverse the path The <productname>Postgres</productname> user must be able to traverse the path
@ -205,6 +215,7 @@ The <productname>Postgres</productname> user must be able to traverse the path
common mistake.) common mistake.)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Symbol names defined within object files must not Symbol names defined within object files must not
@ -212,6 +223,7 @@ Symbol names defined within object files must not
<productname>Postgres</productname>. <productname>Postgres</productname>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The GNU C compiler usually does not provide the special The GNU C compiler usually does not provide the special
@ -267,6 +279,7 @@ No additional loading or link-editing must be performed.
the create function command, one must give it the name the create function command, one must give it the name
of the shared object file (ending in .so) rather than of the shared object file (ending in .so) rather than
the simple object file. the simple object file.
<tip> <tip>
<para> <para>
Actually, <productname>Postgres</productname> does not care Actually, <productname>Postgres</productname> does not care

View File

@ -1,5 +1,5 @@
<!-- <!--
$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.
<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>

View File

@ -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>

View File

@ -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;

View File

@ -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>

View File

@ -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

View File

@ -13,7 +13,7 @@
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>
@ -25,7 +25,7 @@
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>
@ -39,7 +39,7 @@
</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
@ -51,21 +51,31 @@
</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
@ -90,16 +100,17 @@
<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
@ -121,12 +132,12 @@ inv_oid = lo_creat(INV_READ|INV_WRITE|INV_ARCHIVE);
<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>
@ -136,13 +147,13 @@ Oid lo_import(PGconn *conn, text *filename)
<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>

View File

@ -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>
<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>

View File

@ -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
<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>

View File

@ -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
<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
<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
<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

View File

@ -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.
<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
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
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
<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>

View File

@ -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.*)
<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.*)
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.*)
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);
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);
</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>