- Multibyte support is enabled by default since PostgreSQL version 7.3.
Compatibility
- The following types (or spellings thereof) are specified by SQL:
- bit, bit varying, boolean,
- char, character, character
- varying, varchar, date,
- double precision, integer,
- interval, numeric, decimal,
- real, smallint, time,
- timestamp (both with or without time zone).
+ The following types (or spellings thereof) are specified by
+ varying, boolean, char,
+ character, character varying,
+ varchar, date, double
+ precision, integer, interval,
+ numeric, decimal, real,
+ smallint, time, timestamp
+ (both with or without time zone).
- SQL only specifies the integer types integer (or
- int) and smallint. The type
- bigint, and the type names int2,
- int4, and int8 are extensions, which
- are shared with various other SQL database systems.
+
SQL only specifies the integer types
+ integer (or int) and
+ smallint. The type bigint, and the
+ type names int2, int4, and
+ int8 are extensions, which are shared with various
+ other
SQL database systems.
NUMERIC
without any precision or scale creates a column in which numeric
- values of any precision and scale can be stored, up to the implementation
- limit on precision. A column of this kind will not coerce input
- values to any particular scale, whereas numeric columns
- with a declared scale will coerce input values to that scale.
- (The SQL standard requires a default scale of 0, i.e., coercion to
- integer precision. We find this a bit useless. If you're concerned about
- portability, always specify the precision and scale explicitly.)
+ values of any precision and scale can be stored, up to the
+ implementation limit on precision. A column of this kind will
+ not coerce input values to any particular scale, whereas
+ numeric columns with a declared scale will coerce
+ input values to that scale. (The
SQL standard
+ requires a default scale of 0, i.e., coercion to integer
+ precision. We find this a bit useless. If you're concerned
+ about portability, always specify the precision and scale
+ explicitly.)
The types decimal and numeric are
- equivalent. Both types are part of the SQL standard.
+ equivalent. Both types are part of the
SQL
+ standard.
shows the
- general-purpose character types available in PostgreSQL.
+ general-purpose character types available in
longer string into a column of these types will result in an
error, unless the excess characters are all spaces, in which case
the string will be truncated to the maximum length. (This
- somewhat bizarre exception is required by the SQL standard.) If
- the string to be stored is shorter than the declared length,
- values of type character will be space-padded; values
- of type character varying will simply store the
- shorter string.
+ somewhat bizarre exception is required by the
+
SQL standard.) If the string to be stored is
+ shorter than the declared length, values of type
+ character will be space-padded; values of type
+ character varying will simply store the shorter
+ string.
character(n>) or character
varying(n>), then an overlength value will
be truncated to n> characters without raising an
- error. (This too is required by the SQL standard.)
+ error. (This too is required by the
SQL
+ standard.)
more general text type, which stores strings of any
length. Unlike character varying, text
does not require an explicit declared upper limit on the size of
- the string. Although the type text is not in the SQL
- standard, many other RDBMS packages have it as well.
+ the string. Although the type text is not in the
+
SQL standard, many other RDBMS packages have it
+ as well.
To use the bytea escaped octet notation, string
- literals (input strings) must contain two backslashes due because
- they must pass through two parsers in the PostgreSQL server. The
- first backslash is interpreted as an escape character by the
- string-literal parser, and therefore is consumed, leaving the
- characters that follow. The remaining backslash is recognized by
- the bytea input function as the prefix of a three
+ literals (input strings) must contain two backslashes because they
+ must pass through two parsers in the
PostgreSQL>
+ server. The first backslash is interpreted as an escape character
+ by the string-literal parser, and therefore is consumed, leaving
+ the characters that follow. The remaining backslash is recognized
+ by the bytea input function as the prefix of a three
digit octal value. For example, a string literal passed to the
backend as '\\001' becomes
'\001' after passing through the string-literal
- Depending on the front end to PostgreSQL you use, you may have
- additional work to do in terms of escaping and unescaping
- bytea strings. For example, you may also have to escape
- line feeds and carriage returns if your interface automatically
- translates these. Or you may have to double up on backslashes if
- the parser for your language or choice also treats them as an
- escape character.
+ Depending on the front end to
PostgreSQL> you use,
+ you may have additional work to do in terms of escaping and
+ unescaping bytea strings. For example, you may also
+ have to escape line feeds and carriage returns if your interface
+ automatically translates these. Or you may have to double up on
+ backslashes if the parser for your language or choice also treats
+ them as an escape character.
- The SQL standard defines a different binary string type, called
- BLOB or BINARY LARGE OBJECT. The input
- format is different compared to bytea, but the
- provided functions and operators are mostly the same.
-
+ The
SQL standard defines a different binary
+ string type, called BLOB or BINARY LARGE
+ OBJECT. The input format is different compared to
+ bytea, but the provided functions and operators are
+ mostly the same.
+
Output formats can be set to one of the four styles ISO 8601,
SQL (Ingres), traditional PostgreSQL, and
German, using the SET DateStyle. The default
- is the
ISO format. (The SQL standard requires
- the use of the ISO 8601 format. The name of the
- SQL
output format is a historical accident.)
- shows examples of
- each output style. The output of the date and
+ is the
ISO format. (The
+
SQL standard requires the use of the ISO 8601
+ format. The name of the SQL
output format is a
+ historical accident.)
+ linkend="datatype-datetime-output-table"> shows examples of each
+ output style. The output of the date and
time types is of course only the date or time part
in accordance with the given examples.
- To address these difficulties, we recommend using date/time
- types that contain both date and time when using time zones. We
- recommend not using the type time
- with time zone (though it is supported by
+ To address these difficulties, we recommend using date/time types
+ that contain both date and time when using time zones. We
+ recommend not using the type time with
+ time zone (though it is supported by
PostgreSQL for legacy applications and
- for compatibility with other SQL implementations).
- assumes your local time zone for any type containing only
- date or time. Further, time zone support is derived from
- the underlying operating system
- time-zone capabilities, and hence can handle daylight-saving time
- and other expected behavior.
+ for compatibility with other
SQL
+ implementations).
PostgreSQL assumes
+ your local time zone for any type containing only date or
+ time. Further, time zone support is derived from the underlying
+ operating system time-zone capabilities, and hence can handle
+ daylight-saving time and other expected behavior.
-
PostgreSQL obtains time-zone support
+
PostgreSQL obtains time-zone support
from the underlying operating system for dates between 1902 and
2038 (near the typical date limits for Unix-style
systems). Outside of this range, all dates are assumed to be
- specified and used in Universal Coordinated Time (UTC).
+ specified and used in Universal Coordinated Time
- All dates and times are stored internally in UTC,
- traditionally known as Greenwich Mean Time (GMT).
- Times are converted to local time on the database server before being
- sent to the client frontend, hence by default are in the server
- time zone.
+ All dates and times are stored internally in
+
UTC, traditionally known as Greenwich Mean
+ Time
(GMT). Times are converted to local time
+ on the database server before being sent to the client frontend,
+ hence by default are in the server time zone.
- If an invalid time zone is specified,
- the time zone becomes GMT (on most systems anyway).
+ If an invalid time zone is specified, the time zone becomes
+
UTC (on most systems anyway).
Geometric data types represent two-dimensional spatial
objects. shows the geometric
- types available in PostgreSQL. The most fundamental type, the
- point, forms the basis for all of the other types.
+ types available in
PostgreSQL. The
+ most fundamental type, the point, forms the basis for all of the
+ other types.
- Prior to
PostgreSQL> 7.2, BIT data was
- always silently truncated or zero-padded on the right, with or without an
- explicit cast. This was changed to comply with the SQL standard.
+ Prior to
PostgreSQL> 7.2, BIT data
+ was always silently truncated or zero-padded on the right, with
+ or without an explicit cast. This was changed to comply with the
- A third identifier type used by the system is cid>, or command
- identifier. This is the data type of the system columns
- cmin> and cmax>.
- Command identifiers are also 32-bit quantities. This creates a hard
- limit of 232> (4 billion) SQL commands within a single
- transaction.
- In practice this limit is not a problem --- note that the limit is on
- number of SQL commands, not number of tuples processed.
+ A third identifier type used by the system is cid>, or
+ command identifier. This is the data type of the system columns
+ cmin> and cmax>. Command
+ identifiers are also 32-bit quantities. This creates a hard limit
+ of 2
32> (4 billion) SQL commands
+ within a single transaction. In practice this limit is not a
+ problem --- note that the limit is on number of
+
SQL commands, not number of tuples processed.
column data type, but it can be used to declare a function's
argument or result type. Each of the available pseudo-types is
useful in situations where a function's behavior does not
- correspond to simply taking or returning a value of a specific SQL
- data type. lists the
- existing pseudo-types.
+ correspond to simply taking or returning a value of a specific
+
SQL data type.
+ linkend="datatype-pseudotypes-table"> lists the existing
+ pseudo-types.
- The internal> pseudo-type is used to declare functions that are
- meant only to be called internally by the database system, and not by
- direct invocation in a SQL query. If a function has at least one
- internal>-type argument then it cannot be called from SQL.
- To preserve the type safety of this restriction it is important to
- follow this coding rule: do not create any function that is declared
- to return internal> unless it has at least one internal>
- argument.
+ The internal> pseudo-type is used to declare functions
+ that are meant only to be called internally by the database
+ system, and not by direct invocation in a
SQL
+ query. If a function has at least one internal>-type
+ argument then it cannot be called from
SQL. To
+ preserve the type safety of this restriction it is important to
+ follow this coding rule: do not create any function that is
+ declared to return internal> unless it has at least one
+ internal> argument.
-
+
Data Definition
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
This is equivalent to setting the default to null, at least in
- PostgreSQL. As a consequence, it is not an error to drop a
- default where one hadn't been defined, because the default is
- implicitly the null value.
+
PostgreSQL>. As a consequence, it is not an error
+ to drop a default where one hadn't been defined, because the
+ default is implicitly the null value.
standard. Therefore, many users consider qualified names to
really consist of
username>.tablename>.
- This is how PostgreSQL will effectively behave if you create a per-user
- schema for every user.
+ This is how
PostgreSQL will effectively
+ behave if you create a per-user schema for every user.
Monitoring Disk Usage
- This chapter discusses how to monitor the disk usage of a PostgreSQL
- database system. In the current release, the database administrator
- does not have much control over the on-disk storage layout, so this
- chapter is mostly informative and can give you some ideas how to
- manage the disk usage with operating system tools.
+ This chapter discusses how to monitor the disk usage of a
+
PostgreSQL> database system. In the current
+ release, the database administrator does not have much control over
+ the on-disk storage layout, so this chapter is mostly informative
+ and can give you some ideas how to manage the disk usage with
+ operating system tools.
for handling
SQL commands from C code. First, it
takes care of the tedious passing of information to and from
variables in your
C program. Secondly, embedded
- SQL in C is defined in the SQL standard and supported by many other
- SQL databases. The PostgreSQL implementation is designed to match
- this standard as much as possible, and it is usually possible to
- port embedded
SQL programs written for other
+
SQL in C is defined in the
+
SQL standard and supported by many other
+
SQL databases. The
PostgreSQL>
+ implementation is designed to match this standard as much as
+ possible, and it is usually possible to port embedded
+
SQL programs written for other
with relative ease.
- As indicated, programs written for the embedded SQL interface are
- normal C programs with special code inserted to perform
- database-related actions. This special code always has the form
+ As indicated, programs written for the embedded
+
SQL interface are normal C programs with special
+ code inserted to perform database-related actions. This special
+ code always has the form
EXEC SQL ...;
These statements syntactically take the place of a C statement.
Depending on the particular statement, they may appear in the
- global context or within a function. Embedded SQL statements
- follow the case-sensitivity rules of normal SQL code, and not those
- of C.
+ global context or within a function. Embedded
+
SQL statements follow the case-sensitivity rules
+ of
normal SQL code, and not those of C.
The preprocessor program is called ecpg and is
- included in a normal PostgreSQL installation. Embedded SQL
- programs are typically named with an extension
+ included in a normal
PostgreSQL> installation.
+ Embedded SQL programs are typically named with an extension
.pgc. If you have a program file called
prog1.pgc, you can preprocess it by simply
calling
cc -c prog1.c
The generated C source files include headers files from the
- PostgreSQL installation, so if you installed PostgreSQL in a
- location that is not searched by default, you have to add an option
- such as -I/usr/local/pgsql/include to the
- compilation command line.
+
PostgreSQL> installation, so if you installed
+
PostgreSQL> in a location that is not searched by
+ default, you have to add an option such as
+ -I/usr/local/pgsql/include to the compilation
+ command line.
-
SQL99 defines a large set of individual
- features rather than the ineffectively broad three levels found in
+
SQL99 defines a large set of individual
features
+ rather than the ineffectively broad three levels found in
SQL92. We provide a list of supported features,
- followed by a list of the features defined in SQL99 which are not
- yet supported in PostgreSQL.
+ followed by a list of the features defined in
+
SQL99 which are not yet supported in
Overview of Documentation Resources
- The PostgreSQL documentation is organized into several books:
+ The
PostgreSQL> documentation is organized into
+ several books:
&cite-user;
- Documents the SQL query language environment, including data
- types and functions, as well as user-level performance tuning.
- Every PostgreSQL user should read this.
+ Documents the
SQL query language environment,
+ including data types and functions, as well as user-level
+ performance tuning. Every
PostgreSQL> user
+ should read this.
Installation and server management information. Everyone who
- runs a PostgreSQL server, either for personal use or for other
- users, needs to read this.
+ runs a
PostgreSQL> server, either for personal
+ use or for other users, needs to read this.
&cite-reference;
- Reference pages for SQL command syntax, and client and server
- programs. This book is auxiliary to the User's,
- Administrator's, and Programmer's Guides.
+ Reference pages for
SQL command syntax, and
+ client and server programs. This book is auxiliary to the
+ User's, Administrator's, and Programmer's Guides.
-
+
PostgreSQL>]]>
make> programs will not> work.
GNU> make> is often installed under
the name gmake; this document will always
- refer to it by that name. (On some systems GNU make is the
- default tool with the name make>.) To test for
+ refer to it by that name. (On some systems
+
GNU make is the default tool with the name
+
make>.) To test for GNU
gmake --version
To build the server programming language PL/Perl you need a full
- Perl installation, including the libperl
- library and the header files. Since PL/Perl will be a shared
+
Perl installation, including the
+ libperl library and the header files.
+ Since PL/Perl will be a shared library, the
libperl library must be a shared library
also on most platforms. This appears to be the default in
recent Perl versions, but it was not in earlier versions, and in
url="http://www.python.org/doc/FAQ.html#3.30">Python FAQ
3.30. On some operating systems you don't really have
to build a shared library, but then you will have to convince
- the PostgreSQL build system of this. Consult the
- Makefile in the
+ the
PostgreSQL> build system of this. Consult
+ the Makefile in the
src/pl/plpython directory for details.
To enable Native Language Support (
NLS), that
is, the ability to display a program's messages in a language
- other than English, you need an implementation of the
Gettext>
-
built-in (e.g., Linux>,
- class="osname">NetBSD>,
- class="osname">Solaris>), for other systems you can download
- an add-on package from here:
+ other than English, you need an implementation of the
+
systems have this built-in (e.g.,
+ class="osname">Linux>, NetBSD>,
+ Solaris>), for other systems you
+
can download an add-on package from here:
url="http://www.postgresql.org/~petere/gettext.html" >.
If you are using the
gettext> implementation in
- the GNU C library then you will additionally need the
-
GNU Gettext package for some utility
- programs. For any of the other implementations you will not
- need it.
+ the
GNU C library then you will additionally
+ need the
GNU Gettext package for some
+ utility programs. For any of the other implementations you will
+ not need it.
- If you are build from a CVS tree instead of using a released source
- package, or if you want to do development, you also need the
- following packages:
+ If you are build from a
CVS tree instead of
+ using a released source package, or if you want to do development,
+ you also need the following packages:
add /usr/local/pgsql/bin> (or whatever you set
into your PATH>. Strictly speaking, this is not
- necessary, but it will make the use of PostgreSQL much more
- convenient.
+ necessary, but it will make the use of
PostgreSQL>
+ much more convenient.
- Alternatively you can build the driver from source, but you
- should only need to do this if you are making changes to the
- source code. For details, refer to the PostgreSQL installation
+ Alternatively you can build the driver from source, but you should
+ only need to do this if you are making changes to the source code.
+
For details, refer to the PostgreSQL> installation
instructions. After installation, the driver should be found in
PREFIX>/share/java/postgresql.jar.
The resulting driver will be built for the version of Java you are
- running. If you build with a 1.1
JDK> you will build a version
- that supports the JDBC 1 specification, if you build with a Java 2
-
JDK> (e.g., JDK> 1.2 or JDK> 1.3) you will build a version that
- supports the JDBC 2 specification.
+ running. If you build with a 1.1
JDK> you will build a
+ version that supports the JDBC 1 specification, if you build with
+ a Java 2
JDK> (e.g., JDK> 1.2 or
+
JDK> 1.3) you will build a version that supports the
+ JDBC 2 specification.
Description
-pg_execute submits a query to the PostgreSQL backend.
+pg_execute submits a query to the
If the query is not a SELECT statement, the query is executed and the
PQescapeBytea> returns an escaped version of the
-
from parameter binary string, to a caller-provided
- buffer. The return string has all special characters replaced
- so that they can be properly processed by the PostgreSQL string literal
- parser, and the bytea input function. A terminating zero
- byte is also added. The single quotes that must surround
- PostgreSQL string literals are not part of the result string.
+
from parameter binary string, to a
+ caller-provided buffer. The return string has all special
+ characters replaced so that they can be properly processed by the
+
PostgreSQL> string literal parser, and the
+ bytea input function. A terminating zero byte is also
+ added. The single quotes that must surround
+
PostgreSQL> string literals are not part of the
+ result string.
- Every instance of a running PostgreSQL server manages one or more
- databases. Databases are therefore the topmost hierarchical level
- for organizing SQL objects (database objects
). This
- chapter describes the properties of databases, and how to create,
- manage, and destroy them.
+ Every instance of a running
PostgreSQL
+ server manages one or more databases. Databases are therefore the
+ topmost hierarchical level for organizing
SQL
+ objects (database objects
). This chapter describes
+ the properties of databases, and how to create, manage, and destroy
+ them.
Overview
- A database is a named collection of SQL objects (database
- objects). Generally, every database object (tables,
- functions, etc.) belongs to one and only one database. (But there
- are a few system catalogs, for example pg_database>,
- that belong to a whole installation and are accessible from each
- database within the installation.) More accurately, a database is
- a collection of schemas and the schemas contain the tables,
- functions, etc. So the full hierarchy is:
+ A database is a named collection of
SQL objects
+ (database objects
). Generally, every database
+ object (tables, functions, etc.) belongs to one and only one
+ database. (But there are a few system catalogs, for example
+ pg_database>, that belong to a whole installation and
+ are accessible from each database within the installation.) More
+ accurately, a database is a collection of schemas and the schemas
+ contain the tables, functions, etc. So the full hierarchy is:
server, database, schema, table (or something else instead of a
table).
connection. Schemas are a purely logical structure and who can
access what is managed by the privilege system. Databases are
physically separated and access control is managed at the
- connection level. If one PostgreSQL server instance is to house
- projects or users that should be separate and for the most part
- unaware of each other, it is therefore recommendable to put them
- into separate databases. If the projects or users are interrelated
- and should be able to use each other's resources they should be put
- in the same databases but possibly into separate schemas. More
- information about managing schemas is in the &cite-user;.
+ connection level. If one
PostgreSQL> server
+ instance is to house projects or users that should be separate and
+ for the most part unaware of each other, it is therefore
+ recommendable to put them into separate databases. If the projects
+ or users are interrelated and should be able to use each other's
+ resources they should be put in the same databases but possibly
+ into separate schemas. More information about managing schemas is
+ in the &cite-user;.
CREATE DATABASE name>
- where name> follows the usual rules for SQL identifiers.
- The current user automatically becomes
- the owner of the new database. It is the privilege of the owner of
- a database to remove it later on (which also removes all the
- objects in it, even if they have a different owner).
+ where name> follows the usual rules for
+
SQL identifiers. The current user automatically
+ becomes the owner of the new database. It is the privilege of the
+ owner of a database to remove it later on (which also removes all
+ the objects in it, even if they have a different owner).
Database Configuration
- Recall from that the PostgreSQL
- server provides a large number of run-time configuration variables.
- You can set database-specific default values for many of these
- settings.
+ Recall from that the
+
PostgreSQL> server provides a large number of
+ run-time configuration variables. You can set database-specific
+ default values for many of these settings.
- This chapter describes the behavior of the PostgreSQL database
- system when two or more sessions try to access the same data at the
- same time. The goals in that situation are to allow efficient
- access for all sessions while maintaining strict data integrity.
- Every developer of database applications should be familiar with
- the topics covered in this chapter.
+ This chapter describes the behavior of the
+
PostgreSQL database system when two or
+ more sessions try to access the same data at the same time. The
+ goals in that situation are to allow efficient access for all
+ sessions while maintaining strict data integrity. Every developer
+ of database applications should be familiar with the topics covered
+ in this chapter.
The main difference between multiversion and lock models is that
- in MVCC locks acquired for querying (reading) data don't conflict
- with locks acquired for writing data, and so reading never blocks
- writing and writing never blocks reading.
+ in
MVCC locks acquired for querying (reading)
+ data don't conflict with locks acquired for writing data, and so
+ reading never blocks writing and writing never blocks reading.
Table- and row-level locking facilities are also available in
PostgreSQL for applications that cannot
- adapt easily to MVCC behavior. However, proper use of MVCC will
- generally provide better performance than locks.
+ adapt easily to
MVCC behavior. However, proper
+ use of
MVCC will generally provide better
+ performance than locks.
PostgreSQL provides various lock modes
- to control concurrent access to data in tables. These modes can be
- used for application-controlled locking in situations where MVCC
- does not give the desired behavior. Also, most
-
PostgreSQL commands automatically
- acquire locks of appropriate modes to ensure that referenced tables
- are not dropped or modified in incompatible ways while the command
- executes. (For example, ALTER TABLE> cannot be executed
- concurrently with other operations on the same table.)
+ to control concurrent access to data in tables. These modes can
+ be used for application-controlled locking in situations where
+
MVCC does not give the desired behavior. Also,
+
most PostgreSQL commands automatically
+ acquire locks of appropriate modes to ensure that referenced
+ tables are not dropped or modified in incompatible ways while the
+ command executes. (For example, ALTER TABLE> cannot be
+ executed concurrently with other operations on the same table.)
- Global validity checks require extra thought under MVCC. For
+ Global validity checks require extra thought under
MVCC. For
example, a banking application might wish to check that the sum of
all credits in one table equals the sum of debits in another table,
when both tables are being actively updated. Comparing the results of two
What's In This Book
- This book is for PostgreSQL application programmers. It is divided into three parts.
+ This book is for
PostgreSQL> application
+ programmers. It is divided into three parts.
The first part of this book describes the client programming
- interfaces distributed with PostgreSQL. Each of these chapters
- can be read independently. Note that there are many other
- programming interfaces for client programs that are distributed
- separately and contain their own documentation. Readers of the
- first part should be familiar with using SQL commands to
- manipulate and query the database (see the &cite-user;) and of
- course with the programming language that the interface uses.
+ interfaces distributed with
PostgreSQL>. Each of
+ these chapters can be read independently. Note that there are
+ many other programming interfaces for client programs that are
+ distributed separately and contain their own documentation.
+ Readers of the first part should be familiar with using
+
SQL commands to manipulate and query the
+ database (see the &cite-user;) and of course with the programming
+ language that the interface uses.
functionality with user-defined functions, data types, triggers,
etc. These are advanced topics which should probably be
approached only after all the other user documentation about
- PostgreSQL has been understood.
+
PostgreSQL> has been understood.
-
+
- Prior to PostgreSQL 7.3, every function that had the same name as a
- data type, returned that data type, and took one argument of a
- different type was automatically a cast function. This convention has
- been abandoned in face of the introduction of schemas and to be
- able to represent binary compatible casts in the catalogs. (The built-in
- cast functions
- still follow this naming scheme, but they have to be shown as
- casts in pg_cast> now.)
+ Prior to
PostgreSQL> 7.3, every function that had
+ the same name as a data type, returned that data type, and took one
+ argument of a different type was automatically a cast function.
+ This convention has been abandoned in face of the introduction of
+ schemas and to be able to represent binary compatible casts in the
+ catalogs. (The built-in cast functions still follow this naming
+ scheme, but they have to be shown as casts in pg_cast>
+ now.)
name. In particular,
by writing TEMPLATE = template0>, you can create a virgin
database containing only the standard objects predefined by your
- version of <application>PostgreSQL>. This is useful
+ version of <productname>PostgreSQL>. This is useful
if you wish to avoid copying
any installation-local objects that may have been added to
template1>.
When compiling the preprocessed C code files, the compiler needs to
be able to find the
ECPG> header files in the
- PostgreSQL include directory. Therefore, one might have to use the
-
- -I/usr/local/pgsql/include).
+
PostgreSQL> include directory. Therefore, one might
+ have to use the
+ (e.g., -I/usr/local/pgsql/include).
- Prior to <application>PostgreSQL> 7.3, the query plan
+ Prior to <productname>PostgreSQL> 7.3, the query plan
was emitted in the form of a NOTICE message. Now it appears as a
query result (formatted like a table with a single text column).
This command displays the execution plan that the
- <application>PostgreSQL planner
- generates for the supplied query. The execution plan shows how
- the table(s) referenced by the query will be scanned---by plain
- sequential scan, index scan, etc.---and if multiple tables are
- referenced, what join algorithms will be used to bring together
- the required tuples from each input table.
+ <productname>PostgreSQL planner generates for the
+ supplied query. The execution plan shows how the table(s)
+ referenced by the query will be scanned---by plain sequential scan,
+ index scan, etc.---and if multiple tables are referenced, what join
+ algorithms will be used to bring together the required tuples from
+ each input table.
The VERBOSE option emits the full internal representation of the plan tree,
rather than just a summary.
Usually this option is only useful for debugging
- <application>PostgreSQL>. The VERBOSE dump is either
+ <productname>PostgreSQL>. The VERBOSE dump is either
pretty-printed or not, depending on the setting of the
configuration parameter.
Note that the specific numbers shown, and even the selected query
- strategy, may vary between <application>PostgreSQL>
+ strategy, may vary between <productname>PostgreSQL>
releases due to planner improvements.
Description
- Loads a shared library file into the PostgreSQL backend's address
- space. If the file had been loaded previously, it is first
- unloaded. This command is primarily useful to unload and reload a
- shared library file that has been changed since the backend first
- loaded it. To make use of the
- shared library, function(s) in it need to be declared using the
- linkend="sql-createfunction" endterm="sql-createfunction-title"> command.
+ Loads a shared library file into the
PostgreSQL>
+ backend's address space. If the file had been loaded previously,
+ it is first unloaded. This command is primarily useful to unload
+ and reload a shared library file that has been changed since the
+ backend first loaded it. To make use of the shared library,
+ function(s) in it need to be declared using the
+ linkend="sql-createfunction" endterm="sql-createfunction-title">
+ command.
-
+
The option is new in
- PostgreSQL 7.2. In prior releases, the server include files were
+
PostgreSQL> 7.2. In prior releases, the server include files were
installed in the same location as the client headers, which could
be queried with the . To make your
package handle both cases, try the newer option first and test the
- In releases prior to PostgreSQL 7.1, before the
+ In releases prior to
PostgreSQL> 7.1, before the
pg_config came to be, a method for finding the
equivalent configuration information did not exist.
History
- The pg_config utility first appeared in PostgreSQL 7.1.
+ The pg_config utility first appeared in
pg_dump can handle databases from
- previous releases of PostgreSQL, but very old versions are not
- supported anymore (currently prior to 7.0). Use this option
- if you need to override the version check (and if
-
pg_dump then fails, don't say you
- weren't warned).
+ previous releases of
PostgreSQL>, but very old
+ versions are not supported anymore (currently prior to 7.0).
+ Use this option if you need to override the version check (and
+ if
pg_dump then fails, don't say
+ you weren't warned).
Dump object identifiers (
OIDs) for every
- table. Use this option if your application references the OID
+ table. Use this option if your application references the
OID>
columns in some way (e.g., in a foreign key constraint).
Otherwise, this option should not be used.
pg_dumpall is a utility for writing out
- (dumping
) all PostgreSQL databases of a cluster into
- one script file. The script file contains SQL commands that can be
- used as input to
- to restore the databases. It does this by calling
- linkend="app-pgdump"> for each database
-
in a cluster. pg_dumpall also dumps
- global objects that are common to all databases.
+ (
dumping
) all
PostgreSQL> databases
+ of a cluster into one script file. The script file contains
+
SQL commands that can be used as input to
+ linkend="app-psql"> to restore the databases. It does this by
+ calling for each database in a cluster.
+
pg_dumpall also dumps global objects
+ that are common to all databases.
(
pg_dump does not save these objects.)
This currently includes the information about database users and
groups.
pg_dumpall can handle databases
- from previous releases of PostgreSQL, but very old versions
- are not supported anymore (currently prior to 7.0). Use this
- option if you need to override the version check (and if
-
pg_dumpall then fails, don't say
- you weren't warned).
+ from previous releases of
PostgreSQL>, but very
+ old versions are not supported anymore (currently prior to
+ 7.0). Use this option if you need to override the version
+ check (and if
pg_dumpall then
+ fails, don't say you weren't warned).
-
+
- Presently, the commands emitted for
- must be done as superuser. So, you should also specify
- a superuser name with
-
-
pg_restore as a PostgreSQL superuser.
+ Presently, the commands emitted for
+
+ should also specify a superuser name with
+ preferably specify
pg_restore could not attach to the
- PostgreSQL server
- process on the specified host and port. If you see this message,
- ensure that the server
- is running on the proper host and that you have specified the proper
- port. If your site uses an authentication system, ensure that you
- have obtained the required authentication credentials.
+
PostgreSQL> server process on the specified
+ host and port. If you see this message, ensure that the
+ server is running on the proper host and that you have
+ specified the proper port. If your site uses an
+ authentication system, ensure that you have obtained the
+ required authentication credentials.
When a direct database connection is specified using the -d
option,
pg_restore internally executes
- SQL statements. If you have problems running
+
SQL statements. If you have problems running
pg_restore, make sure you are able to select
information from the database using, for example,
The system uses no more than NAMEDATALEN-1
characters of an identifier; longer names can be written in
commands, but they will be truncated. By default,
- NAMEDATALEN is 64 so the maximum identifier length
- is 63 (but at the time PostgreSQL is built,
+ NAMEDATALEN is 64 so the maximum identifier
+
length is 63 (but at the time PostgreSQL> is built,
NAMEDATALEN can be changed in
src/include/postgres_ext.h).
shows the precedence and
- associativity of the operators in PostgreSQL. Most operators have
- the same precedence and are left-associative. The precedence and
- associativity of the operators is hard-wired into the parser.
- This may lead to non-intuitive behavior; for example the Boolean
- operators <> and >> have a different
- precedence than the Boolean operators <=> and
- >=>. Also, you will sometimes need to add
- parentheses when using combinations of binary and unary operators.
- For instance
+ associativity of the operators in
PostgreSQL>.
+ Most operators have the same precedence and are left-associative.
+ The precedence and associativity of the operators is hard-wired
+ into the parser. This may lead to non-intuitive behavior; for
+ example the Boolean operators <> and
+ >> have a different precedence than the Boolean
+ operators <=> and >=>. Also, you will
+ sometimes need to add parentheses when using combinations of
+ binary and unary operators. For instance
SELECT 5 ! - 6;
these aspects. We only assume some general knowledge about how to
use computers. No particular Unix or programming experience is
required. This book is mainly intended to give you a hands-on
- experience with important aspects of the PostgreSQL system. It
- makes no attempt to be a complete or thorough treatment of the
- topics it covers.
+ experience with important aspects of the
+
PostgreSQL system. It makes no attempt
+ to be a complete or thorough treatment of the topics it covers.
What's In This Book
- This book describes the use of the SQL language in PostgreSQL. We
- start with describing the general syntax of SQL, then explain how
- to create the structures to hold data, how to populate the
- database, and how to query it. The middle part lists the
- available data types and functions for use in SQL data commands.
- The rest of the book treats several aspects that are important for
- tuning a database for optimal performance.
+ This book describes the use of the
SQL language
+ in
PostgreSQL. We start with
+ describing the general syntax of
SQL, then
+ explain how to create the structures to hold data, how to populate
+ the database, and how to query it. The middle part lists the
+ available data types and functions for use in
+
SQL data commands. The rest of the book treats
+ several aspects that are important for tuning a database for
+ optimal performance.
- Readers of this book should know how to connect to a PostgreSQL
- database and issue SQL commands. Readers that are unfamiliar with
- these issues are encouraged to read the &cite-tutorial; first. SQL
- commands are typically entered using the PostgreSQL interactive
+ Readers of this book should know how to connect to a
PostgreSQL>
+ database and issue
SQL commands. Readers that are unfamiliar with
+ these issues are encouraged to read the &cite-tutorial; first.
SQL
+ commands are typically entered using the
PostgreSQL> interactive
terminal
psql, but other programs that
have similar functionality can be used as well.
- The user ID the <application>PostgreSQL> server runs
+ The user ID the <productname>PostgreSQL> server runs
as must be able to traverse the path to the file you intend to
load. Making the file or a higher-level directory not readable
and/or not executable by the postgres user is a
- <application>PostgreSQL> will not compile a C function
+ <productname>PostgreSQL> will not compile a C function
automatically. The object file must be compiled before it is referenced
in a CREATE
FUNCTION> command. See for additional
- Before <application>PostgreSQL> release 7.2, only exact
+ Before <productname>PostgreSQL> release 7.2, only exact
absolute paths to object files could be specified in CREATE
FUNCTION>. This approach is now deprecated since it makes the
function definition unnecessarily unportable. It's best to specify