mirror of
https://github.com/postgres/postgres.git
synced 2025-07-12 21:01:52 +03:00
Update this branch to match CVS head, includes WIN32 improvements.
This commit is contained in:
5
HISTORY
5
HISTORY
@ -212,6 +212,7 @@ Add new DateStyle values MDY, DMY, and YMD, honor US and European for
|
|||||||
prepared statements) (Tom)
|
prepared statements) (Tom)
|
||||||
Assume NaN value to be larger than any other value in MIN()/MAX() (Tom)
|
Assume NaN value to be larger than any other value in MIN()/MAX() (Tom)
|
||||||
Prevent interval from supressing ':00' seconds display
|
Prevent interval from supressing ':00' seconds display
|
||||||
|
New pg_get_triggerdef(prettyprint) and pg_constraint_is_visible() functions
|
||||||
|
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
@ -259,6 +260,10 @@ Allow pqInternalNotice() to accept a format string and args instead of
|
|||||||
just a preformatted message (Tom, Sean Chittenden)
|
just a preformatted message (Tom, Sean Chittenden)
|
||||||
Allow control SSL negotiation with sslmode values "disable", "allow",
|
Allow control SSL negotiation with sslmode values "disable", "allow",
|
||||||
"Prefer", and "require" (Jon Jensen)
|
"Prefer", and "require" (Jon Jensen)
|
||||||
|
Allow new error codes and levels of text (Tom)
|
||||||
|
Allow access to the underlying table and column of a query result (Tom)
|
||||||
|
Allow access to the current transaction status (Tom)
|
||||||
|
Add ability to pass binary data directly to the backend (Tom)
|
||||||
|
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Header: /cvsroot/pgsql/config/ac_func_accept_argtypes.m4,v 1.4 2002/03/29 17:32:53 petere Exp $
|
# $Header: /cvsroot/pgsql/config/ac_func_accept_argtypes.m4,v 1.4.4.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
# This comes from the official Autoconf macro archive at
|
# This comes from the official Autoconf macro archive at
|
||||||
# <http://research.cys.de/autoconf-archive/>
|
# <http://research.cys.de/autoconf-archive/>
|
||||||
# (I removed the $ before the Id CVS keyword below.)
|
# (I removed the $ before the Id CVS keyword below.)
|
||||||
@ -7,9 +7,10 @@
|
|||||||
dnl @synopsis AC_FUNC_ACCEPT_ARGTYPES
|
dnl @synopsis AC_FUNC_ACCEPT_ARGTYPES
|
||||||
dnl
|
dnl
|
||||||
dnl Checks the data types of the three arguments to accept(). Results are
|
dnl Checks the data types of the three arguments to accept(). Results are
|
||||||
dnl placed into the symbols ACCEPT_TYPE_ARG[123], consistent with the
|
dnl placed into the symbols ACCEPT_TYPE_RETURN and ACCEPT_TYPE_ARG[123],
|
||||||
dnl following example:
|
dnl consistent with the following example:
|
||||||
dnl
|
dnl
|
||||||
|
dnl #define ACCEPT_TYPE_RETURN int
|
||||||
dnl #define ACCEPT_TYPE_ARG1 int
|
dnl #define ACCEPT_TYPE_ARG1 int
|
||||||
dnl #define ACCEPT_TYPE_ARG2 struct sockaddr *
|
dnl #define ACCEPT_TYPE_ARG2 struct sockaddr *
|
||||||
dnl #define ACCEPT_TYPE_ARG3 socklen_t
|
dnl #define ACCEPT_TYPE_ARG3 socklen_t
|
||||||
@ -36,24 +37,29 @@ dnl
|
|||||||
# Solaris 7 and 8 have arg3 as 'void *' (disguised as 'Psocklen_t'
|
# Solaris 7 and 8 have arg3 as 'void *' (disguised as 'Psocklen_t'
|
||||||
# which is *not* 'socklen_t *'). If we detect that, then we assume
|
# which is *not* 'socklen_t *'). If we detect that, then we assume
|
||||||
# 'int' as the result, because that ought to work best.
|
# 'int' as the result, because that ought to work best.
|
||||||
|
#
|
||||||
|
# On Win32, accept() returns 'unsigned int PASCAL'
|
||||||
|
|
||||||
AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
|
AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
|
||||||
[AC_MSG_CHECKING([types of arguments for accept()])
|
[AC_MSG_CHECKING([types of arguments for accept()])
|
||||||
AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl
|
AC_CACHE_VAL(ac_cv_func_accept_return,dnl
|
||||||
[AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl
|
[AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl
|
||||||
[AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl
|
[AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl
|
||||||
[for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
|
[AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl
|
||||||
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
[for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
|
||||||
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
|
for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
|
||||||
AC_TRY_COMPILE(
|
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
|
||||||
|
AC_TRY_COMPILE(
|
||||||
[#ifdef HAVE_SYS_TYPES_H
|
[#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
extern int accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *);],
|
extern $ac_cv_func_accept_return accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *);],
|
||||||
[], [ac_not_found=no; break 3], [ac_not_found=yes])
|
[], [ac_not_found=no; break 4], [ac_not_found=yes])
|
||||||
|
done
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@ -63,10 +69,13 @@ extern int accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func
|
|||||||
if test "$ac_cv_func_accept_arg3" = "void"; then
|
if test "$ac_cv_func_accept_arg3" = "void"; then
|
||||||
ac_cv_func_accept_arg3=int
|
ac_cv_func_accept_arg3=int
|
||||||
fi
|
fi
|
||||||
|
])dnl AC_CACHE_VAL
|
||||||
])dnl AC_CACHE_VAL
|
])dnl AC_CACHE_VAL
|
||||||
])dnl AC_CACHE_VAL
|
])dnl AC_CACHE_VAL
|
||||||
])dnl AC_CACHE_VAL
|
])dnl AC_CACHE_VAL
|
||||||
AC_MSG_RESULT([$ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *])
|
AC_MSG_RESULT([$ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *])
|
||||||
|
AC_DEFINE_UNQUOTED(ACCEPT_TYPE_RETURN, $ac_cv_func_accept_return,
|
||||||
|
[Define to the return type of 'accept'])
|
||||||
AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG1, $ac_cv_func_accept_arg1,
|
AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG1, $ac_cv_func_accept_arg1,
|
||||||
[Define to the type of arg 1 of 'accept'])
|
[Define to the type of arg 1 of 'accept'])
|
||||||
AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG2, $ac_cv_func_accept_arg2,
|
AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG2, $ac_cv_func_accept_arg2,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Autoconf macros for configuring the build of Python extension modules
|
# Autoconf macros for configuring the build of Python extension modules
|
||||||
#
|
#
|
||||||
# $Header: /cvsroot/pgsql/config/python.m4,v 1.5 2002/09/04 22:54:18 petere Exp $
|
# $Header: /cvsroot/pgsql/config/python.m4,v 1.5.4.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
# PGAC_PATH_PYTHON
|
# PGAC_PATH_PYTHON
|
||||||
@ -26,19 +26,14 @@ python_version=`${PYTHON} -c "import sys; print sys.version[[:3]]"`
|
|||||||
python_prefix=`${PYTHON} -c "import sys; print sys.prefix"`
|
python_prefix=`${PYTHON} -c "import sys; print sys.prefix"`
|
||||||
python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"`
|
python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"`
|
||||||
python_configdir="${python_execprefix}/lib/python${python_version}/config"
|
python_configdir="${python_execprefix}/lib/python${python_version}/config"
|
||||||
python_moduledir="${python_prefix}/lib/python${python_version}/site-packages"
|
|
||||||
python_moduleexecdir="${python_execprefix}/lib/python${python_version}/site-packages"
|
|
||||||
python_includespec="-I${python_prefix}/include/python${python_version}"
|
python_includespec="-I${python_prefix}/include/python${python_version}"
|
||||||
if test "$python_prefix" != "$python_execprefix"; then
|
if test "$python_prefix" != "$python_execprefix"; then
|
||||||
python_includespec="-I${python_execprefix}/include/python${python_version} $python_includespec"
|
python_includespec="-I${python_execprefix}/include/python${python_version} $python_includespec"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST(python_version)[]dnl
|
|
||||||
AC_SUBST(python_prefix)[]dnl
|
AC_SUBST(python_prefix)[]dnl
|
||||||
AC_SUBST(python_execprefix)[]dnl
|
AC_SUBST(python_execprefix)[]dnl
|
||||||
AC_SUBST(python_configdir)[]dnl
|
AC_SUBST(python_configdir)[]dnl
|
||||||
AC_SUBST(python_moduledir)[]dnl
|
|
||||||
AC_SUBST(python_moduleexecdir)[]dnl
|
|
||||||
AC_SUBST(python_includespec)[]dnl
|
AC_SUBST(python_includespec)[]dnl
|
||||||
# This should be enough of a message.
|
# This should be enough of a message.
|
||||||
if test "$python_prefix" != "$python_execprefix"; then
|
if test "$python_prefix" != "$python_execprefix"; then
|
||||||
@ -49,19 +44,6 @@ fi
|
|||||||
])# _PGAC_CHECK_PYTHON_DIRS
|
])# _PGAC_CHECK_PYTHON_DIRS
|
||||||
|
|
||||||
|
|
||||||
# PGAC_CHECK_PYTHON_MODULE_SETUP
|
|
||||||
# ------------------------------
|
|
||||||
# Finds things required to build a Python extension module.
|
|
||||||
# This used to do more, that's why it's separate.
|
|
||||||
#
|
|
||||||
# It would be nice if we could check whether the current setup allows
|
|
||||||
# the build of the shared module. Future project.
|
|
||||||
AC_DEFUN([PGAC_CHECK_PYTHON_MODULE_SETUP],
|
|
||||||
[
|
|
||||||
AC_REQUIRE([_PGAC_CHECK_PYTHON_DIRS])
|
|
||||||
])# PGAC_CHECK_PYTHON_MODULE_SETUP
|
|
||||||
|
|
||||||
|
|
||||||
# PGAC_CHECK_PYTHON_EMBED_SETUP
|
# PGAC_CHECK_PYTHON_EMBED_SETUP
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Courtesy of the INN 2.3.1 package...
|
# Courtesy of the INN 2.3.1 package...
|
||||||
|
265
configure
vendored
265
configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.53 for PostgreSQL 7.4beta1.
|
# Generated by GNU Autoconf 2.53 for PostgreSQL 7.4beta2.
|
||||||
#
|
#
|
||||||
# Report bugs to <pgsql-bugs@postgresql.org>.
|
# Report bugs to <pgsql-bugs@postgresql.org>.
|
||||||
#
|
#
|
||||||
@ -258,8 +258,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='PostgreSQL'
|
PACKAGE_NAME='PostgreSQL'
|
||||||
PACKAGE_TARNAME='postgresql'
|
PACKAGE_TARNAME='postgresql'
|
||||||
PACKAGE_VERSION='7.4beta1'
|
PACKAGE_VERSION='7.4beta2'
|
||||||
PACKAGE_STRING='PostgreSQL 7.4beta1'
|
PACKAGE_STRING='PostgreSQL 7.4beta2'
|
||||||
PACKAGE_BUGREPORT='pgsql-bugs@postgresql.org'
|
PACKAGE_BUGREPORT='pgsql-bugs@postgresql.org'
|
||||||
|
|
||||||
ac_unique_file="src/backend/access/common/heaptuple.c"
|
ac_unique_file="src/backend/access/common/heaptuple.c"
|
||||||
@ -769,7 +769,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures PostgreSQL 7.4beta1 to adapt to many kinds of systems.
|
\`configure' configures PostgreSQL 7.4beta2 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -830,7 +830,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of PostgreSQL 7.4beta1:";;
|
short | recursive ) echo "Configuration of PostgreSQL 7.4beta2:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -860,7 +860,7 @@ Optional Packages:
|
|||||||
--with-tclconfig=DIR tclConfig.sh and tkConfig.sh are in DIR
|
--with-tclconfig=DIR tclConfig.sh and tkConfig.sh are in DIR
|
||||||
--with-tkconfig=DIR tkConfig.sh is in DIR
|
--with-tkconfig=DIR tkConfig.sh is in DIR
|
||||||
--with-perl build Perl modules (PL/Perl)
|
--with-perl build Perl modules (PL/Perl)
|
||||||
--with-python build Python interface module
|
--with-python build Python modules (PL/Python)
|
||||||
--with-java build JDBC interface and Java tools
|
--with-java build JDBC interface and Java tools
|
||||||
--with-krb4[=DIR] build with Kerberos 4 support [/usr/athena]
|
--with-krb4[=DIR] build with Kerberos 4 support [/usr/athena]
|
||||||
--with-krb5[=DIR] build with Kerberos 5 support [/usr/athena]
|
--with-krb5[=DIR] build with Kerberos 5 support [/usr/athena]
|
||||||
@ -949,7 +949,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit 0
|
test -n "$ac_init_help" && exit 0
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
PostgreSQL configure 7.4beta1
|
PostgreSQL configure 7.4beta2
|
||||||
generated by GNU Autoconf 2.53
|
generated by GNU Autoconf 2.53
|
||||||
|
|
||||||
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
|
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
|
||||||
@ -966,7 +966,7 @@ cat >&5 <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by PostgreSQL $as_me 7.4beta1, which was
|
It was created by PostgreSQL $as_me 7.4beta2, which was
|
||||||
generated by GNU Autoconf 2.53. Invocation command line was
|
generated by GNU Autoconf 2.53. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -2370,6 +2370,12 @@ fi
|
|||||||
{ echo "$as_me:$LINENO: using CFLAGS=$CFLAGS" >&5
|
{ echo "$as_me:$LINENO: using CFLAGS=$CFLAGS" >&5
|
||||||
echo "$as_me: using CFLAGS=$CFLAGS" >&6;}
|
echo "$as_me: using CFLAGS=$CFLAGS" >&6;}
|
||||||
|
|
||||||
|
# We already have this in Makefile.win32, but configure needs it too
|
||||||
|
if test "$PORTNAME" = "win32"
|
||||||
|
then
|
||||||
|
CPPFLAGS="$CPPFLAGS -Isrc/include/port/win32"
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if the compiler still works with the template settings
|
# Check if the compiler still works with the template settings
|
||||||
echo "$as_me:$LINENO: checking whether the C compiler still works" >&5
|
echo "$as_me:$LINENO: checking whether the C compiler still works" >&5
|
||||||
echo $ECHO_N "checking whether the C compiler still works... $ECHO_C" >&6
|
echo $ECHO_N "checking whether the C compiler still works... $ECHO_C" >&6
|
||||||
@ -2981,7 +2987,7 @@ echo "${ECHO_T}$with_perl" >&6
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Optionally build Python interface module
|
# Optionally build Python modules (PL/Python)
|
||||||
#
|
#
|
||||||
echo "$as_me:$LINENO: checking whether to build Python modules" >&5
|
echo "$as_me:$LINENO: checking whether to build Python modules" >&5
|
||||||
echo $ECHO_N "checking whether to build Python modules... $ECHO_C" >&6
|
echo $ECHO_N "checking whether to build Python modules... $ECHO_C" >&6
|
||||||
@ -4294,8 +4300,6 @@ python_version=`${PYTHON} -c "import sys; print sys.version[:3]"`
|
|||||||
python_prefix=`${PYTHON} -c "import sys; print sys.prefix"`
|
python_prefix=`${PYTHON} -c "import sys; print sys.prefix"`
|
||||||
python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"`
|
python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"`
|
||||||
python_configdir="${python_execprefix}/lib/python${python_version}/config"
|
python_configdir="${python_execprefix}/lib/python${python_version}/config"
|
||||||
python_moduledir="${python_prefix}/lib/python${python_version}/site-packages"
|
|
||||||
python_moduleexecdir="${python_execprefix}/lib/python${python_version}/site-packages"
|
|
||||||
python_includespec="-I${python_prefix}/include/python${python_version}"
|
python_includespec="-I${python_prefix}/include/python${python_version}"
|
||||||
if test "$python_prefix" != "$python_execprefix"; then
|
if test "$python_prefix" != "$python_execprefix"; then
|
||||||
python_includespec="-I${python_execprefix}/include/python${python_version} $python_includespec"
|
python_includespec="-I${python_execprefix}/include/python${python_version} $python_includespec"
|
||||||
@ -4311,9 +4315,6 @@ echo "${ECHO_T}$python_prefix/lib/python${python_version}" >&6
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking how to link an embedded Python application" >&5
|
echo "$as_me:$LINENO: checking how to link an embedded Python application" >&5
|
||||||
echo $ECHO_N "checking how to link an embedded Python application... $ECHO_C" >&6
|
echo $ECHO_N "checking how to link an embedded Python application... $ECHO_C" >&6
|
||||||
|
|
||||||
@ -10815,19 +10816,23 @@ _ACEOF
|
|||||||
fi
|
fi
|
||||||
echo "$as_me:$LINENO: checking types of arguments for accept()" >&5
|
echo "$as_me:$LINENO: checking types of arguments for accept()" >&5
|
||||||
echo $ECHO_N "checking types of arguments for accept()... $ECHO_C" >&6
|
echo $ECHO_N "checking types of arguments for accept()... $ECHO_C" >&6
|
||||||
if test "${ac_cv_func_accept_arg1+set}" = set; then
|
if test "${ac_cv_func_accept_return+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
if test "${ac_cv_func_accept_arg2+set}" = set; then
|
if test "${ac_cv_func_accept_arg1+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
if test "${ac_cv_func_accept_arg3+set}" = set; then
|
if test "${ac_cv_func_accept_arg2+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
|
if test "${ac_cv_func_accept_arg3+set}" = set; then
|
||||||
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
|
||||||
|
for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
|
||||||
|
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
#line $LINENO "configure"
|
#line $LINENO "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
@ -10836,7 +10841,7 @@ else
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
extern int accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *);
|
extern $ac_cv_func_accept_return accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *);
|
||||||
#ifdef F77_DUMMY_MAIN
|
#ifdef F77_DUMMY_MAIN
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
@ -10863,13 +10868,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|||||||
ac_status=$?
|
ac_status=$?
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); }; }; then
|
(exit $ac_status); }; }; then
|
||||||
ac_not_found=no; break 3
|
ac_not_found=no; break 4
|
||||||
else
|
else
|
||||||
echo "$as_me: failed program was:" >&5
|
echo "$as_me: failed program was:" >&5
|
||||||
cat conftest.$ac_ext >&5
|
cat conftest.$ac_ext >&5
|
||||||
ac_not_found=yes
|
ac_not_found=yes
|
||||||
fi
|
fi
|
||||||
rm -f conftest.$ac_objext conftest.$ac_ext
|
rm -f conftest.$ac_objext conftest.$ac_ext
|
||||||
|
done
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@ -10887,8 +10893,15 @@ fi
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
echo "$as_me:$LINENO: result: $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&5
|
|
||||||
echo "${ECHO_T}$ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&6
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&6
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define ACCEPT_TYPE_RETURN $ac_cv_func_accept_return
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define ACCEPT_TYPE_ARG1 $ac_cv_func_accept_arg1
|
#define ACCEPT_TYPE_ARG1 $ac_cv_func_accept_arg1
|
||||||
@ -11198,6 +11211,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HAVE_IPV6=no
|
||||||
echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5
|
echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5
|
||||||
echo $ECHO_N "checking for struct sockaddr_in6... $ECHO_C" >&6
|
echo $ECHO_N "checking for struct sockaddr_in6... $ECHO_C" >&6
|
||||||
if test "${ac_cv_type_struct_sockaddr_in6+set}" = set; then
|
if test "${ac_cv_type_struct_sockaddr_in6+set}" = set; then
|
||||||
@ -11319,11 +11333,13 @@ cat >>confdefs.h <<\_ACEOF
|
|||||||
#define HAVE_IPV6 1
|
#define HAVE_IPV6 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
HAVE_IPV6=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking for PS_STRINGS" >&5
|
echo "$as_me:$LINENO: checking for PS_STRINGS" >&5
|
||||||
echo $ECHO_N "checking for PS_STRINGS... $ECHO_C" >&6
|
echo $ECHO_N "checking for PS_STRINGS... $ECHO_C" >&6
|
||||||
if test "${pgac_cv_var_PS_STRINGS+set}" = set; then
|
if test "${pgac_cv_var_PS_STRINGS+set}" = set; then
|
||||||
@ -13102,6 +13118,7 @@ fi
|
|||||||
#
|
#
|
||||||
# For each platform, we need to know about any special compile and link
|
# For each platform, we need to know about any special compile and link
|
||||||
# libraries, and whether the normal C function names are thread-safe.
|
# libraries, and whether the normal C function names are thread-safe.
|
||||||
|
# See the comment at the top of src/port/thread.c for more information.
|
||||||
#
|
#
|
||||||
if test "$enable_thread_safety" = yes; then
|
if test "$enable_thread_safety" = yes; then
|
||||||
if test "${ac_cv_header_pthread_h+set}" = set; then
|
if test "${ac_cv_header_pthread_h+set}" = set; then
|
||||||
@ -13208,8 +13225,8 @@ fi
|
|||||||
if test $ac_cv_header_pthread_h = yes; then
|
if test $ac_cv_header_pthread_h = yes; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
{ { echo "$as_me:$LINENO: error: pthread.h not found, required for --with-threads" >&5
|
{ { echo "$as_me:$LINENO: error: pthread.h not found, required for --enable-thread-safetys" >&5
|
||||||
echo "$as_me: error: pthread.h not found, required for --with-threads" >&2;}
|
echo "$as_me: error: pthread.h not found, required for --enable-thread-safetys" >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -13221,12 +13238,14 @@ Cannot enable threads on your platform.
|
|||||||
Please report your platform threading info to the PostgreSQL mailing lists
|
Please report your platform threading info to the PostgreSQL mailing lists
|
||||||
so it can be added to the next release. Report all compile flags, link flags,
|
so it can be added to the next release. Report all compile flags, link flags,
|
||||||
functions, or libraries required for threading support.
|
functions, or libraries required for threading support.
|
||||||
|
See the comment at the top of src/port/thread.c for more information.
|
||||||
" >&5
|
" >&5
|
||||||
echo "$as_me: error:
|
echo "$as_me: error:
|
||||||
Cannot enable threads on your platform.
|
Cannot enable threads on your platform.
|
||||||
Please report your platform threading info to the PostgreSQL mailing lists
|
Please report your platform threading info to the PostgreSQL mailing lists
|
||||||
so it can be added to the next release. Report all compile flags, link flags,
|
so it can be added to the next release. Report all compile flags, link flags,
|
||||||
functions, or libraries required for threading support.
|
functions, or libraries required for threading support.
|
||||||
|
See the comment at the top of src/port/thread.c for more information.
|
||||||
" >&2;}
|
" >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
fi
|
||||||
@ -13254,22 +13273,16 @@ _CFLAGS="$CFLAGS"
|
|||||||
_LIBS="$LIBS"
|
_LIBS="$LIBS"
|
||||||
CFLAGS="$CFLAGS $THREAD_CFLAGS"
|
CFLAGS="$CFLAGS $THREAD_CFLAGS"
|
||||||
LIBS="$LIBS $THREAD_LIBS"
|
LIBS="$LIBS $THREAD_LIBS"
|
||||||
|
echo "$as_me:$LINENO: checking for strerror_r" >&5
|
||||||
|
echo $ECHO_N "checking for strerror_r... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_func_strerror_r+set}" = set; then
|
||||||
for ac_func in strerror_r getpwuid_r gethostbyname_r
|
|
||||||
do
|
|
||||||
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
||||||
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
|
||||||
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
|
|
||||||
if eval "test \"\${$as_ac_var+set}\" = set"; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
#line $LINENO "configure"
|
#line $LINENO "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char $ac_func (); below. */
|
which can conflict with char strerror_r (); below. */
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -13277,7 +13290,7 @@ extern "C"
|
|||||||
#endif
|
#endif
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
builtin and then its argument prototype would still apply. */
|
builtin and then its argument prototype would still apply. */
|
||||||
char $ac_func ();
|
char strerror_r ();
|
||||||
char (*f) ();
|
char (*f) ();
|
||||||
|
|
||||||
#ifdef F77_DUMMY_MAIN
|
#ifdef F77_DUMMY_MAIN
|
||||||
@ -13292,10 +13305,10 @@ main ()
|
|||||||
/* The GNU C library defines this for functions which it implements
|
/* The GNU C library defines this for functions which it implements
|
||||||
to always fail with ENOSYS. Some functions are actually named
|
to always fail with ENOSYS. Some functions are actually named
|
||||||
something starting with __ and the normal name is an alias. */
|
something starting with __ and the normal name is an alias. */
|
||||||
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
|
#if defined (__stub_strerror_r) || defined (__stub___strerror_r)
|
||||||
choke me
|
choke me
|
||||||
#else
|
#else
|
||||||
f = $ac_func;
|
f = strerror_r;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
;
|
;
|
||||||
@ -13314,23 +13327,167 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|||||||
ac_status=$?
|
ac_status=$?
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); }; }; then
|
(exit $ac_status); }; }; then
|
||||||
eval "$as_ac_var=yes"
|
ac_cv_func_strerror_r=yes
|
||||||
else
|
else
|
||||||
echo "$as_me: failed program was:" >&5
|
echo "$as_me: failed program was:" >&5
|
||||||
cat conftest.$ac_ext >&5
|
cat conftest.$ac_ext >&5
|
||||||
eval "$as_ac_var=no"
|
ac_cv_func_strerror_r=no
|
||||||
fi
|
fi
|
||||||
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
fi
|
fi
|
||||||
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
|
echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r" >&5
|
||||||
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
|
echo "${ECHO_T}$ac_cv_func_strerror_r" >&6
|
||||||
if test `eval echo '${'$as_ac_var'}'` = yes; then
|
if test $ac_cv_func_strerror_r = yes; then
|
||||||
cat >>confdefs.h <<_ACEOF
|
:
|
||||||
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
else
|
||||||
_ACEOF
|
{ { echo "$as_me:$LINENO: error: strerror_r not found, required on this platform for --enable-thread-safety" >&5
|
||||||
|
echo "$as_me: error: strerror_r not found, required on this platform for --enable-thread-safety" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for getpwuid_r" >&5
|
||||||
|
echo $ECHO_N "checking for getpwuid_r... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_func_getpwuid_r+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
|
which can conflict with char getpwuid_r (); below. */
|
||||||
|
#include <assert.h>
|
||||||
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char getpwuid_r ();
|
||||||
|
char (*f) ();
|
||||||
|
|
||||||
|
#ifdef F77_DUMMY_MAIN
|
||||||
|
# ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
# endif
|
||||||
|
int F77_DUMMY_MAIN() { return 1; }
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
/* The GNU C library defines this for functions which it implements
|
||||||
|
to always fail with ENOSYS. Some functions are actually named
|
||||||
|
something starting with __ and the normal name is an alias. */
|
||||||
|
#if defined (__stub_getpwuid_r) || defined (__stub___getpwuid_r)
|
||||||
|
choke me
|
||||||
|
#else
|
||||||
|
f = getpwuid_r;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_func_getpwuid_r=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
cat conftest.$ac_ext >&5
|
||||||
|
ac_cv_func_getpwuid_r=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_func_getpwuid_r" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_func_getpwuid_r" >&6
|
||||||
|
if test $ac_cv_func_getpwuid_r = yes; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
{ { echo "$as_me:$LINENO: error: getpwuid_r not found, required on this platform for --enable-thread-safety" >&5
|
||||||
|
echo "$as_me: error: getpwuid_r not found, required on this platform for --enable-thread-safety" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for gethostbyname_r" >&5
|
||||||
|
echo $ECHO_N "checking for gethostbyname_r... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_func_gethostbyname_r+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
|
which can conflict with char gethostbyname_r (); below. */
|
||||||
|
#include <assert.h>
|
||||||
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char gethostbyname_r ();
|
||||||
|
char (*f) ();
|
||||||
|
|
||||||
|
#ifdef F77_DUMMY_MAIN
|
||||||
|
# ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
# endif
|
||||||
|
int F77_DUMMY_MAIN() { return 1; }
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
/* The GNU C library defines this for functions which it implements
|
||||||
|
to always fail with ENOSYS. Some functions are actually named
|
||||||
|
something starting with __ and the normal name is an alias. */
|
||||||
|
#if defined (__stub_gethostbyname_r) || defined (__stub___gethostbyname_r)
|
||||||
|
choke me
|
||||||
|
#else
|
||||||
|
f = gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_func_gethostbyname_r=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
cat conftest.$ac_ext >&5
|
||||||
|
ac_cv_func_gethostbyname_r=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname_r" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_func_gethostbyname_r" >&6
|
||||||
|
if test $ac_cv_func_gethostbyname_r = yes; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
{ { echo "$as_me:$LINENO: error: gethostbyname_r not found, required on this platform for --enable-thread-safety" >&5
|
||||||
|
echo "$as_me: error: gethostbyname_r not found, required on this platform for --enable-thread-safety" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
|
|
||||||
CFLAGS="$_CFLAGS"
|
CFLAGS="$_CFLAGS"
|
||||||
LIBS="$_LIBS"
|
LIBS="$_LIBS"
|
||||||
@ -17838,7 +17995,7 @@ _ASBOX
|
|||||||
} >&5
|
} >&5
|
||||||
cat >&5 <<_CSEOF
|
cat >&5 <<_CSEOF
|
||||||
|
|
||||||
This file was extended by PostgreSQL $as_me 7.4beta1, which was
|
This file was extended by PostgreSQL $as_me 7.4beta2, which was
|
||||||
generated by GNU Autoconf 2.53. Invocation command line was
|
generated by GNU Autoconf 2.53. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -17900,7 +18057,7 @@ _ACEOF
|
|||||||
|
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF
|
cat >>$CONFIG_STATUS <<_ACEOF
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
PostgreSQL config.status 7.4beta1
|
PostgreSQL config.status 7.4beta2
|
||||||
configured by $0, generated by GNU Autoconf 2.53,
|
configured by $0, generated by GNU Autoconf 2.53,
|
||||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||||
|
|
||||||
@ -18144,15 +18301,13 @@ s,@perl_privlibexp@,$perl_privlibexp,;t t
|
|||||||
s,@perl_useshrplib@,$perl_useshrplib,;t t
|
s,@perl_useshrplib@,$perl_useshrplib,;t t
|
||||||
s,@perl_embed_ldflags@,$perl_embed_ldflags,;t t
|
s,@perl_embed_ldflags@,$perl_embed_ldflags,;t t
|
||||||
s,@PYTHON@,$PYTHON,;t t
|
s,@PYTHON@,$PYTHON,;t t
|
||||||
s,@python_version@,$python_version,;t t
|
|
||||||
s,@python_prefix@,$python_prefix,;t t
|
s,@python_prefix@,$python_prefix,;t t
|
||||||
s,@python_execprefix@,$python_execprefix,;t t
|
s,@python_execprefix@,$python_execprefix,;t t
|
||||||
s,@python_configdir@,$python_configdir,;t t
|
s,@python_configdir@,$python_configdir,;t t
|
||||||
s,@python_moduledir@,$python_moduledir,;t t
|
|
||||||
s,@python_moduleexecdir@,$python_moduleexecdir,;t t
|
|
||||||
s,@python_includespec@,$python_includespec,;t t
|
s,@python_includespec@,$python_includespec,;t t
|
||||||
s,@python_libspec@,$python_libspec,;t t
|
s,@python_libspec@,$python_libspec,;t t
|
||||||
s,@LIBOBJS@,$LIBOBJS,;t t
|
s,@LIBOBJS@,$LIBOBJS,;t t
|
||||||
|
s,@HAVE_IPV6@,$HAVE_IPV6,;t t
|
||||||
s,@THREAD_CFLAGS@,$THREAD_CFLAGS,;t t
|
s,@THREAD_CFLAGS@,$THREAD_CFLAGS,;t t
|
||||||
s,@THREAD_LIBS@,$THREAD_LIBS,;t t
|
s,@THREAD_LIBS@,$THREAD_LIBS,;t t
|
||||||
s,@HAVE_POSIX_SIGNALS@,$HAVE_POSIX_SIGNALS,;t t
|
s,@HAVE_POSIX_SIGNALS@,$HAVE_POSIX_SIGNALS,;t t
|
||||||
|
31
configure.in
31
configure.in
@ -1,5 +1,5 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
dnl $Header: /cvsroot/pgsql/configure.in,v 1.280 2003/08/11 18:07:38 tgl Exp $
|
dnl $Header: /cvsroot/pgsql/configure.in,v 1.280.2.1 2003/09/07 04:36:38 momjian Exp $
|
||||||
dnl
|
dnl
|
||||||
dnl Developers, please strive to achieve this order:
|
dnl Developers, please strive to achieve this order:
|
||||||
dnl
|
dnl
|
||||||
@ -21,7 +21,7 @@ dnl The GNU folks apparently haven't heard that some people don't use
|
|||||||
dnl Texinfo. Use this sorcery to use "docdir" instead of "infodir".
|
dnl Texinfo. Use this sorcery to use "docdir" instead of "infodir".
|
||||||
m4_define([info], [doc])
|
m4_define([info], [doc])
|
||||||
m4_define([infodir], [docdir])
|
m4_define([infodir], [docdir])
|
||||||
AC_INIT([PostgreSQL], [7.4beta1], [pgsql-bugs@postgresql.org])
|
AC_INIT([PostgreSQL], [7.4beta2], [pgsql-bugs@postgresql.org])
|
||||||
m4_undefine([infodir])
|
m4_undefine([infodir])
|
||||||
m4_undefine([info])
|
m4_undefine([info])
|
||||||
AC_SUBST(docdir)
|
AC_SUBST(docdir)
|
||||||
@ -238,6 +238,12 @@ if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then
|
|||||||
fi
|
fi
|
||||||
AC_MSG_NOTICE([using CFLAGS=$CFLAGS])
|
AC_MSG_NOTICE([using CFLAGS=$CFLAGS])
|
||||||
|
|
||||||
|
# We already have this in Makefile.win32, but configure needs it too
|
||||||
|
if test "$PORTNAME" = "win32"
|
||||||
|
then
|
||||||
|
CPPFLAGS="$CPPFLAGS -Isrc/include/port/win32"
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if the compiler still works with the template settings
|
# Check if the compiler still works with the template settings
|
||||||
AC_MSG_CHECKING([whether the C compiler still works])
|
AC_MSG_CHECKING([whether the C compiler still works])
|
||||||
AC_TRY_LINK([], [return 0;],
|
AC_TRY_LINK([], [return 0;],
|
||||||
@ -362,10 +368,10 @@ AC_MSG_RESULT([$with_perl])
|
|||||||
AC_SUBST(with_perl)
|
AC_SUBST(with_perl)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Optionally build Python interface module
|
# Optionally build Python modules (PL/Python)
|
||||||
#
|
#
|
||||||
AC_MSG_CHECKING([whether to build Python modules])
|
AC_MSG_CHECKING([whether to build Python modules])
|
||||||
PGAC_ARG_BOOL(with, python, no, [ --with-python build Python interface module])
|
PGAC_ARG_BOOL(with, python, no, [ --with-python build Python modules (PL/Python)])
|
||||||
AC_MSG_RESULT([$with_python])
|
AC_MSG_RESULT([$with_python])
|
||||||
AC_SUBST(with_python)
|
AC_SUBST(with_python)
|
||||||
|
|
||||||
@ -608,7 +614,6 @@ fi
|
|||||||
|
|
||||||
if test "$with_python" = yes; then
|
if test "$with_python" = yes; then
|
||||||
PGAC_PATH_PYTHON
|
PGAC_PATH_PYTHON
|
||||||
PGAC_CHECK_PYTHON_MODULE_SETUP
|
|
||||||
PGAC_CHECK_PYTHON_EMBED_SETUP
|
PGAC_CHECK_PYTHON_EMBED_SETUP
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -833,12 +838,15 @@ AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid memmove poll pstat setproc
|
|||||||
|
|
||||||
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
|
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
|
||||||
|
|
||||||
|
HAVE_IPV6=no
|
||||||
AC_CHECK_TYPE([struct sockaddr_in6],
|
AC_CHECK_TYPE([struct sockaddr_in6],
|
||||||
[AC_CHECK_FUNC(inet_ntop,
|
[AC_CHECK_FUNC(inet_ntop,
|
||||||
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])])],
|
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])
|
||||||
|
HAVE_IPV6=yes])],
|
||||||
[],
|
[],
|
||||||
[$ac_includes_default
|
[$ac_includes_default
|
||||||
#include <netinet/in.h>])
|
#include <netinet/in.h>])
|
||||||
|
AC_SUBST(HAVE_IPV6)
|
||||||
|
|
||||||
AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
|
AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
|
||||||
[AC_TRY_LINK(
|
[AC_TRY_LINK(
|
||||||
@ -978,9 +986,10 @@ AC_FUNC_FSEEKO
|
|||||||
#
|
#
|
||||||
# For each platform, we need to know about any special compile and link
|
# For each platform, we need to know about any special compile and link
|
||||||
# libraries, and whether the normal C function names are thread-safe.
|
# libraries, and whether the normal C function names are thread-safe.
|
||||||
|
# See the comment at the top of src/port/thread.c for more information.
|
||||||
#
|
#
|
||||||
if test "$enable_thread_safety" = yes; then
|
if test "$enable_thread_safety" = yes; then
|
||||||
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --with-threads])])
|
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safetys])])
|
||||||
|
|
||||||
if test "$SUPPORTS_THREADS" != yes; then
|
if test "$SUPPORTS_THREADS" != yes; then
|
||||||
AC_MSG_ERROR([
|
AC_MSG_ERROR([
|
||||||
@ -988,6 +997,7 @@ Cannot enable threads on your platform.
|
|||||||
Please report your platform threading info to the PostgreSQL mailing lists
|
Please report your platform threading info to the PostgreSQL mailing lists
|
||||||
so it can be added to the next release. Report all compile flags, link flags,
|
so it can be added to the next release. Report all compile flags, link flags,
|
||||||
functions, or libraries required for threading support.
|
functions, or libraries required for threading support.
|
||||||
|
See the comment at the top of src/port/thread.c for more information.
|
||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@ -1014,7 +1024,12 @@ _CFLAGS="$CFLAGS"
|
|||||||
_LIBS="$LIBS"
|
_LIBS="$LIBS"
|
||||||
CFLAGS="$CFLAGS $THREAD_CFLAGS"
|
CFLAGS="$CFLAGS $THREAD_CFLAGS"
|
||||||
LIBS="$LIBS $THREAD_LIBS"
|
LIBS="$LIBS $THREAD_LIBS"
|
||||||
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
|
AC_CHECK_FUNC(strerror_r,
|
||||||
|
[], [AC_MSG_ERROR([strerror_r not found, required on this platform for --enable-thread-safety])])
|
||||||
|
AC_CHECK_FUNC(getpwuid_r,
|
||||||
|
[], [AC_MSG_ERROR([getpwuid_r not found, required on this platform for --enable-thread-safety])])
|
||||||
|
AC_CHECK_FUNC(gethostbyname_r,
|
||||||
|
[], [AC_MSG_ERROR([gethostbyname_r not found, required on this platform for --enable-thread-safety])])
|
||||||
CFLAGS="$_CFLAGS"
|
CFLAGS="$_CFLAGS"
|
||||||
LIBS="$_LIBS"
|
LIBS="$_LIBS"
|
||||||
fi
|
fi
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Header: /cvsroot/pgsql/contrib/contrib-global.mk,v 1.5 2002/11/02 00:16:21 tgl Exp $
|
# $Header: /cvsroot/pgsql/contrib/contrib-global.mk,v 1.5.4.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
|
|
||||||
# This file contains generic rules to build many kinds of simple
|
# This file contains generic rules to build many kinds of simple
|
||||||
# contrib modules. You only need to set a few variables and include
|
# contrib modules. You only need to set a few variables and include
|
||||||
@ -127,7 +127,7 @@ endif
|
|||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
ifneq (,$(DATA)$(DATA_built))
|
ifneq (,$(DATA)$(DATA_built))
|
||||||
rm -f $(addprefix $(DESTDIR)$(datadir)/contrib/, $(DATA) $(DATA_built))
|
rm -f $(addprefix $(DESTDIR)$(datadir)/contrib/, $(notdir $(DATA) $(DATA_built)))
|
||||||
endif
|
endif
|
||||||
ifdef MODULES
|
ifdef MODULES
|
||||||
rm -f $(addprefix $(DESTDIR)$(pkglibdir)/, $(addsuffix $(DLSUFFIX), $(MODULES)))
|
rm -f $(addprefix $(DESTDIR)$(pkglibdir)/, $(addsuffix $(DLSUFFIX), $(MODULES)))
|
||||||
|
@ -5,7 +5,6 @@ char *token;
|
|||||||
int tokenlen;
|
int tokenlen;
|
||||||
int tsearch_yylex(void);
|
int tsearch_yylex(void);
|
||||||
void start_parse_str(char *, int);
|
void start_parse_str(char *, int);
|
||||||
void start_parse_fh(FILE *, int);
|
|
||||||
void end_parse(void);
|
void end_parse(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,36 +22,6 @@ char *s = NULL; /* to return WHOLE hyphenated-word */
|
|||||||
|
|
||||||
YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */
|
YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */
|
||||||
|
|
||||||
int lrlimit = -1; /* for limiting read from filehandle ( -1 - unlimited read ) */
|
|
||||||
int bytestoread = 0; /* for limiting read from filehandle */
|
|
||||||
|
|
||||||
/* redefine macro for read limited length */
|
|
||||||
#define YY_INPUT(buf,result,max_size) \
|
|
||||||
if ( yy_current_buffer->yy_is_interactive ) { \
|
|
||||||
int c = '*', n; \
|
|
||||||
for ( n = 0; n < max_size && \
|
|
||||||
(c = getc( tsearch_yyin )) != EOF && c != '\n'; ++n ) \
|
|
||||||
buf[n] = (char) c; \
|
|
||||||
if ( c == '\n' ) \
|
|
||||||
buf[n++] = (char) c; \
|
|
||||||
if ( c == EOF && ferror( tsearch_yyin ) ) \
|
|
||||||
YY_FATAL_ERROR( "input in flex scanner failed" ); \
|
|
||||||
result = n; \
|
|
||||||
} else { \
|
|
||||||
if ( lrlimit == 0 ) \
|
|
||||||
result=YY_NULL; \
|
|
||||||
else { \
|
|
||||||
if ( lrlimit>0 ) { \
|
|
||||||
bytestoread = ( lrlimit > max_size ) ? max_size : lrlimit; \
|
|
||||||
lrlimit -= bytestoread; \
|
|
||||||
} else \
|
|
||||||
bytestoread = max_size; \
|
|
||||||
if ( ((result = fread( buf, 1, bytestoread, tsearch_yyin )) == 0) \
|
|
||||||
&& ferror( tsearch_yyin ) ) \
|
|
||||||
YY_FATAL_ERROR( "input in flex scanner failed" ); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option 8bit
|
%option 8bit
|
||||||
@ -327,13 +297,4 @@ void start_parse_str(char* str, int limit) {
|
|||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start parse from filehandle */
|
|
||||||
void start_parse_fh( FILE* fh, int limit ) {
|
|
||||||
if (buf) end_parse();
|
|
||||||
lrlimit = ( limit ) ? limit : -1;
|
|
||||||
buf = tsearch_yy_create_buffer( fh, YY_BUF_SIZE );
|
|
||||||
tsearch_yy_switch_to_buffer( buf );
|
|
||||||
BEGIN INITIAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
# $Header: /cvsroot/pgsql/contrib/tsearch2/Makefile,v 1.3.2.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
|
|
||||||
subdir = contrib/tsearch2
|
subdir = contrib/tsearch2
|
||||||
top_builddir = ../..
|
top_builddir = ../..
|
||||||
include $(top_builddir)/src/Makefile.global
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
|
|
||||||
override CPPFLAGS := -I$(srcdir) -I$(srcdir)/snowball -I$(srcdir)/ispell -I$(srcdir)/wordparser $(CPPFLAGS)
|
|
||||||
|
|
||||||
MODULE_big = tsearch2
|
MODULE_big = tsearch2
|
||||||
OBJS = dict_ex.o dict.o snmap.o stopword.o common.o prs_dcfg.o \
|
OBJS = dict_ex.o dict.o snmap.o stopword.o common.o prs_dcfg.o \
|
||||||
dict_snowball.o dict_ispell.o dict_syn.o \
|
dict_snowball.o dict_ispell.o dict_syn.o \
|
||||||
@ -22,30 +22,26 @@ $(SUBDIROBJS): $(SUBDIRS:%=%-recursive) ;
|
|||||||
$(SUBDIRS:%=%-recursive):
|
$(SUBDIRS:%=%-recursive):
|
||||||
$(MAKE) -C $(subst -recursive,,$@) SUBSYS.o
|
$(MAKE) -C $(subst -recursive,,$@) SUBSYS.o
|
||||||
|
|
||||||
|
PG_CPPFLAGS = -I$(srcdir)/snowball -I$(srcdir)/ispell -I$(srcdir)/wordparser
|
||||||
|
|
||||||
|
DATA = stopword/english.stop stopword/russian.stop
|
||||||
DATA_built = tsearch2.sql untsearch2.sql
|
DATA_built = tsearch2.sql untsearch2.sql
|
||||||
DOCS = README.tsearch2
|
DOCS = README.tsearch2
|
||||||
REGRESS = tsearch2
|
REGRESS = tsearch2
|
||||||
|
|
||||||
EXTRA_CLEAN = tsearch2.sql.in
|
|
||||||
|
|
||||||
SHLIB_LINK := -lm
|
SHLIB_LINK := -lm
|
||||||
include $(top_srcdir)/contrib/contrib-global.mk
|
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
install: installstop
|
tsearch2.sql: tsearch.sql.in
|
||||||
|
sed -e 's,MODULE_PATHNAME,$$libdir/$(MODULE_big),g' \
|
||||||
installstop:
|
-e 's,DATA_PATH,$(datadir)/contrib,g' $< >$@
|
||||||
cp $(srcdir)/stopword/*.stop $(datadir)
|
|
||||||
|
|
||||||
|
|
||||||
tsearch2.sql.in: tsearch.sql._in
|
|
||||||
sed 's,DATA_PATH,$(datadir),g' < $< > $@
|
|
||||||
|
|
||||||
untsearch2.sql: untsearch.sql.in
|
untsearch2.sql: untsearch.sql.in
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
|
.PHONY: subclean
|
||||||
clean: subclean
|
clean: subclean
|
||||||
|
|
||||||
subclean:
|
subclean:
|
||||||
for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit; done
|
for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit; done
|
||||||
|
|
||||||
|
include $(top_srcdir)/contrib/contrib-global.mk
|
||||||
|
@ -1,17 +1,13 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>tsearch-v2-intro</title>
|
||||||
|
|
||||||
|
<link type="text/css" rel="stylesheet" href="tsearch-V2-intro_files/tsearch.txt"></head>
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>tsearch-v2-intro</title>
|
|
||||||
<link type="text/css" rel="stylesheet" href="/~megera/postgres/gist/tsearch/tsearch.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h2>Tsearch2 - Introduction</h2>
|
<h2>Tsearch2 - Introduction</h2>
|
||||||
|
|
||||||
<p><a href=
|
<p><a href="http://www.sai.msu.su/%7Emegera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html">
|
||||||
"http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html">
|
|
||||||
[Online version]</a> of this document is available.</p>
|
[Online version]</a> of this document is available.</p>
|
||||||
|
|
||||||
<p>The tsearch2 module is available to add as an extension to
|
<p>The tsearch2 module is available to add as an extension to
|
||||||
@ -38,13 +34,11 @@
|
|||||||
|
|
||||||
<p>The README.tsearch2 file included in the contrib/tsearch2
|
<p>The README.tsearch2 file included in the contrib/tsearch2
|
||||||
directory contains a brief overview and history behind tsearch.
|
directory contains a brief overview and history behind tsearch.
|
||||||
This can also be found online <a href=
|
This can also be found online <a href="http://www.sai.msu.su/%7Emegera/postgres/gist/tsearch/V2/">[right
|
||||||
"http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/">[right
|
|
||||||
here]</a>.</p>
|
here]</a>.</p>
|
||||||
|
|
||||||
<p>Further in depth documentation such as a full function
|
<p>Further in depth documentation such as a full function
|
||||||
reference, and user guide can be found online at the <a href=
|
reference, and user guide can be found online at the <a href="http://www.sai.msu.su/%7Emegera/postgres/gist/tsearch/V2/docs/">[tsearch
|
||||||
"http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/">[tsearch
|
|
||||||
documentation home]</a>.</p>
|
documentation home]</a>.</p>
|
||||||
|
|
||||||
<h3>ACKNOWLEDGEMENTS</h3>
|
<h3>ACKNOWLEDGEMENTS</h3>
|
||||||
@ -105,11 +99,9 @@
|
|||||||
|
|
||||||
<p>Step one is to download the tsearch V2 module :</p>
|
<p>Step one is to download the tsearch V2 module :</p>
|
||||||
|
|
||||||
<p><a href=
|
<p><a href="http://www.sai.msu.su/%7Emegera/postgres/gist/tsearch/V2/">[http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/]</a>
|
||||||
"http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/">[http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/]</a>
|
|
||||||
(check Development History for latest stable version !)</p>
|
(check Development History for latest stable version !)</p>
|
||||||
<pre>
|
<pre> tar -zxvf tsearch-v2.tar.gz
|
||||||
tar -zxvf tsearch-v2.tar.gz
|
|
||||||
mv tsearch2 PGSQL_SRC/contrib/
|
mv tsearch2 PGSQL_SRC/contrib/
|
||||||
cd PGSQL_SRC/contrib/tsearch2
|
cd PGSQL_SRC/contrib/tsearch2
|
||||||
</pre>
|
</pre>
|
||||||
@ -121,18 +113,15 @@
|
|||||||
|
|
||||||
<p>Then continue with the regular building and installation
|
<p>Then continue with the regular building and installation
|
||||||
process</p>
|
process</p>
|
||||||
<pre>
|
<pre> gmake
|
||||||
gmake
|
|
||||||
gmake install
|
gmake install
|
||||||
gmake installcheck
|
gmake installcheck
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>That is pretty much all you have to do, unless of course you
|
<p>That is pretty much all you have to do, unless of course you
|
||||||
get errors. However if you get those, you better go check with
|
get errors. However if you get those, you better go check with
|
||||||
the mailing lists over at <a href=
|
the mailing lists over at <a href="http://www.postgresql.org/">http://www.postgresql.org</a> or
|
||||||
"http://www.postgresql.org">http://www.postgresql.org</a> or
|
<a href="http://openfts.sourceforge.net/">http://openfts.sourceforge.net/</a>
|
||||||
<a href=
|
|
||||||
"http://openfts.sourceforge.net/">http://openfts.sourceforge.net/</a>
|
|
||||||
since its never failed for me.</p>
|
since its never failed for me.</p>
|
||||||
|
|
||||||
<p>The directory in the contib/ and the directory from the
|
<p>The directory in the contib/ and the directory from the
|
||||||
@ -151,15 +140,13 @@
|
|||||||
<p>We should create a database to use as an example for the
|
<p>We should create a database to use as an example for the
|
||||||
remainder of this file. We can call the database "ftstest". You
|
remainder of this file. We can call the database "ftstest". You
|
||||||
can create it from the command line like this:</p>
|
can create it from the command line like this:</p>
|
||||||
<pre>
|
<pre> #createdb ftstest
|
||||||
#createdb ftstest
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>If you thought installation was easy, this next bit is even
|
<p>If you thought installation was easy, this next bit is even
|
||||||
easier. Change to the PGSQL_SRC/contrib/tsearch2 directory and
|
easier. Change to the PGSQL_SRC/contrib/tsearch2 directory and
|
||||||
type:</p>
|
type:</p>
|
||||||
<pre>
|
<pre> psql ftstest < tsearch2.sql
|
||||||
psql ftstest < tsearch2.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>The file "tsearch2.sql" holds all the wonderful little
|
<p>The file "tsearch2.sql" holds all the wonderful little
|
||||||
@ -170,8 +157,7 @@
|
|||||||
pg_ts_cfgmap are added.</p>
|
pg_ts_cfgmap are added.</p>
|
||||||
|
|
||||||
<p>You can check out the tables if you like:</p>
|
<p>You can check out the tables if you like:</p>
|
||||||
<pre>
|
<pre> #psql ftstest
|
||||||
#psql ftstest
|
|
||||||
ftstest=# \d
|
ftstest=# \d
|
||||||
List of relations
|
List of relations
|
||||||
Schema | Name | Type | Owner
|
Schema | Name | Type | Owner
|
||||||
@ -188,8 +174,7 @@
|
|||||||
<p>The first thing we can do is try out some of the types that
|
<p>The first thing we can do is try out some of the types that
|
||||||
are provided for us. Lets look at the tsvector type provided
|
are provided for us. Lets look at the tsvector type provided
|
||||||
for us:</p>
|
for us:</p>
|
||||||
<pre>
|
<pre> SELECT 'Our first string used today'::tsvector;
|
||||||
SELECT 'Our first string used today'::tsvector;
|
|
||||||
tsvector
|
tsvector
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
'Our' 'used' 'first' 'today' 'string'
|
'Our' 'used' 'first' 'today' 'string'
|
||||||
@ -199,8 +184,7 @@
|
|||||||
<p>The results are the words used within our string. Notice
|
<p>The results are the words used within our string. Notice
|
||||||
they are not in any particular order. The tsvector type returns
|
they are not in any particular order. The tsvector type returns
|
||||||
a string of space separated words.</p>
|
a string of space separated words.</p>
|
||||||
<pre>
|
<pre> SELECT 'Our first string used today first string'::tsvector;
|
||||||
SELECT 'Our first string used today first string'::tsvector;
|
|
||||||
tsvector
|
tsvector
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
'Our' 'used' 'again' 'first' 'today' 'string'
|
'Our' 'used' 'again' 'first' 'today' 'string'
|
||||||
@ -217,8 +201,7 @@
|
|||||||
by the tsearch2 module.</p>
|
by the tsearch2 module.</p>
|
||||||
|
|
||||||
<p>The function to_tsvector has 3 possible signatures:</p>
|
<p>The function to_tsvector has 3 possible signatures:</p>
|
||||||
<pre>
|
<pre> to_tsvector(oid, text);
|
||||||
to_tsvector(oid, text);
|
|
||||||
to_tsvector(text, text);
|
to_tsvector(text, text);
|
||||||
to_tsvector(text);
|
to_tsvector(text);
|
||||||
</pre>
|
</pre>
|
||||||
@ -228,8 +211,7 @@
|
|||||||
the searchable text is broken up into words (Stemming process).
|
the searchable text is broken up into words (Stemming process).
|
||||||
Right now we will specify the 'default' configuration. See the
|
Right now we will specify the 'default' configuration. See the
|
||||||
section on TSEARCH2 CONFIGURATION to learn more about this.</p>
|
section on TSEARCH2 CONFIGURATION to learn more about this.</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('default',
|
||||||
SELECT to_tsvector('default',
|
|
||||||
'Our first string used today first string');
|
'Our first string used today first string');
|
||||||
to_tsvector
|
to_tsvector
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
@ -259,8 +241,7 @@
|
|||||||
<p>If you want to view the output of the tsvector fields
|
<p>If you want to view the output of the tsvector fields
|
||||||
without their positions, you can do so with the function
|
without their positions, you can do so with the function
|
||||||
"strip(tsvector)".</p>
|
"strip(tsvector)".</p>
|
||||||
<pre>
|
<pre> SELECT strip(to_tsvector('default',
|
||||||
SELECT strip(to_tsvector('default',
|
|
||||||
'Our first string used today first string'));
|
'Our first string used today first string'));
|
||||||
strip
|
strip
|
||||||
--------------------------------
|
--------------------------------
|
||||||
@ -270,8 +251,7 @@
|
|||||||
<p>If you wish to know the number of unique words returned in
|
<p>If you wish to know the number of unique words returned in
|
||||||
the tsvector you can do so by using the function
|
the tsvector you can do so by using the function
|
||||||
"length(tsvector)"</p>
|
"length(tsvector)"</p>
|
||||||
<pre>
|
<pre> SELECT length(to_tsvector('default',
|
||||||
SELECT length(to_tsvector('default',
|
|
||||||
'Our first string used today first string'));
|
'Our first string used today first string'));
|
||||||
length
|
length
|
||||||
--------
|
--------
|
||||||
@ -282,15 +262,13 @@
|
|||||||
<p>Lets take a look at the function to_tsquery. It also has 3
|
<p>Lets take a look at the function to_tsquery. It also has 3
|
||||||
signatures which follow the same rational as the to_tsvector
|
signatures which follow the same rational as the to_tsvector
|
||||||
function:</p>
|
function:</p>
|
||||||
<pre>
|
<pre> to_tsquery(oid, text);
|
||||||
to_tsquery(oid, text);
|
|
||||||
to_tsquery(text, text);
|
to_tsquery(text, text);
|
||||||
to_tsquery(text);
|
to_tsquery(text);
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Lets try using the function with a single word :</p>
|
<p>Lets try using the function with a single word :</p>
|
||||||
<pre>
|
<pre> SELECT to_tsquery('default', 'word');
|
||||||
SELECT to_tsquery('default', 'word');
|
|
||||||
to_tsquery
|
to_tsquery
|
||||||
-----------
|
-----------
|
||||||
'word'
|
'word'
|
||||||
@ -303,8 +281,7 @@
|
|||||||
|
|
||||||
<p>Lets attempt to use the function with a string of multiple
|
<p>Lets attempt to use the function with a string of multiple
|
||||||
words:</p>
|
words:</p>
|
||||||
<pre>
|
<pre> SELECT to_tsquery('default', 'this is many words');
|
||||||
SELECT to_tsquery('default', 'this is many words');
|
|
||||||
ERROR: Syntax error
|
ERROR: Syntax error
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -313,8 +290,7 @@
|
|||||||
"tsquery" used for searching a tsvector field. What we need to
|
"tsquery" used for searching a tsvector field. What we need to
|
||||||
do is search for one to many words with some kind of logic (for
|
do is search for one to many words with some kind of logic (for
|
||||||
now simple boolean).</p>
|
now simple boolean).</p>
|
||||||
<pre>
|
<pre> SELECT to_tsquery('default', 'searching|sentence');
|
||||||
SELECT to_tsquery('default', 'searching|sentence');
|
|
||||||
to_tsquery
|
to_tsquery
|
||||||
----------------------
|
----------------------
|
||||||
'search' | 'sentenc'
|
'search' | 'sentenc'
|
||||||
@ -328,8 +304,7 @@
|
|||||||
<p>You can not use words defined as being a stop word in your
|
<p>You can not use words defined as being a stop word in your
|
||||||
configuration. The function will not fail ... you will just get
|
configuration. The function will not fail ... you will just get
|
||||||
no result, and a NOTICE like this:</p>
|
no result, and a NOTICE like this:</p>
|
||||||
<pre>
|
<pre> SELECT to_tsquery('default', 'a|is&not|!the');
|
||||||
SELECT to_tsquery('default', 'a|is&not|!the');
|
|
||||||
NOTICE: Query contains only stopword(s)
|
NOTICE: Query contains only stopword(s)
|
||||||
or doesn't contain lexem(s), ignored
|
or doesn't contain lexem(s), ignored
|
||||||
to_tsquery
|
to_tsquery
|
||||||
@ -348,8 +323,7 @@
|
|||||||
<p>The next stage is to add a full text index to an existing
|
<p>The next stage is to add a full text index to an existing
|
||||||
table. In this example we already have a table defined as
|
table. In this example we already have a table defined as
|
||||||
follows:</p>
|
follows:</p>
|
||||||
<pre>
|
<pre> CREATE TABLE tblMessages
|
||||||
CREATE TABLE tblMessages
|
|
||||||
(
|
(
|
||||||
intIndex int4,
|
intIndex int4,
|
||||||
strTopic varchar(100),
|
strTopic varchar(100),
|
||||||
@ -362,8 +336,7 @@
|
|||||||
test strings for a topic, and a message. here is some test data
|
test strings for a topic, and a message. here is some test data
|
||||||
I inserted. (yes I know it's completely useless stuff ;-) but
|
I inserted. (yes I know it's completely useless stuff ;-) but
|
||||||
it will serve our purpose right now).</p>
|
it will serve our purpose right now).</p>
|
||||||
<pre>
|
<pre> INSERT INTO tblMessages
|
||||||
INSERT INTO tblMessages
|
|
||||||
VALUES ('1', 'Testing Topic', 'Testing message data input');
|
VALUES ('1', 'Testing Topic', 'Testing message data input');
|
||||||
INSERT INTO tblMessages
|
INSERT INTO tblMessages
|
||||||
VALUES ('2', 'Movie', 'Breakfast at Tiffany\'s');
|
VALUES ('2', 'Movie', 'Breakfast at Tiffany\'s');
|
||||||
@ -400,8 +373,7 @@
|
|||||||
<p>The next stage is to create a special text index which we
|
<p>The next stage is to create a special text index which we
|
||||||
will use for FTI, so we can search our table of messages for
|
will use for FTI, so we can search our table of messages for
|
||||||
words or a phrase. We do this using the SQL command:</p>
|
words or a phrase. We do this using the SQL command:</p>
|
||||||
<pre>
|
<pre> ALTER TABLE tblMessages ADD COLUMN idxFTI tsvector;
|
||||||
ALTER TABLE tblMessages ADD idxFTI tsvector;
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Note that unlike traditional indexes, this is actually a new
|
<p>Note that unlike traditional indexes, this is actually a new
|
||||||
@ -411,8 +383,7 @@
|
|||||||
|
|
||||||
<p>The general rule for the initial insertion of data will
|
<p>The general rule for the initial insertion of data will
|
||||||
follow four steps:</p>
|
follow four steps:</p>
|
||||||
<pre>
|
<pre> 1. update table
|
||||||
1. update table
|
|
||||||
2. vacuum full analyze
|
2. vacuum full analyze
|
||||||
3. create index
|
3. create index
|
||||||
4. vacuum full analyze
|
4. vacuum full analyze
|
||||||
@ -426,8 +397,7 @@
|
|||||||
the index has been created on the table, vacuum full analyze is
|
the index has been created on the table, vacuum full analyze is
|
||||||
run again to update postgres's statistics (ie having the index
|
run again to update postgres's statistics (ie having the index
|
||||||
take effect).</p>
|
take effect).</p>
|
||||||
<pre>
|
<pre> UPDATE tblMessages SET idxFTI=to_tsvector('default', strMessage);
|
||||||
UPDATE tblMessages SET idxFTI=to_tsvector('default', strMessage);
|
|
||||||
VACUUM FULL ANALYZE;
|
VACUUM FULL ANALYZE;
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -436,8 +406,7 @@
|
|||||||
information stored, you should instead do the following, which
|
information stored, you should instead do the following, which
|
||||||
effectively concatenates the two fields into one before being
|
effectively concatenates the two fields into one before being
|
||||||
inserted into the table:</p>
|
inserted into the table:</p>
|
||||||
<pre>
|
<pre> UPDATE tblMessages
|
||||||
UPDATE tblMessages
|
|
||||||
SET idxFTI=to_tsvector('default',coalesce(strTopic,'') ||' '|| coalesce(strMessage,''));
|
SET idxFTI=to_tsvector('default',coalesce(strTopic,'') ||' '|| coalesce(strMessage,''));
|
||||||
VACUUM FULL ANALYZE;
|
VACUUM FULL ANALYZE;
|
||||||
</pre>
|
</pre>
|
||||||
@ -451,8 +420,7 @@
|
|||||||
Full Text INDEXINGi ;-)), so don't worry about any indexing
|
Full Text INDEXINGi ;-)), so don't worry about any indexing
|
||||||
overhead. We will create an index based on the gist function.
|
overhead. We will create an index based on the gist function.
|
||||||
GiST is an index structure for Generalized Search Tree.</p>
|
GiST is an index structure for Generalized Search Tree.</p>
|
||||||
<pre>
|
<pre> CREATE INDEX idxFTI_idx ON tblMessages USING gist(idxFTI);
|
||||||
CREATE INDEX idxFTI_idx ON tblMessages USING gist(idxFTI);
|
|
||||||
VACUUM FULL ANALYZE;
|
VACUUM FULL ANALYZE;
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -464,15 +432,13 @@
|
|||||||
<p>The last thing to do is set up a trigger so every time a row
|
<p>The last thing to do is set up a trigger so every time a row
|
||||||
in this table is changed, the text index is automatically
|
in this table is changed, the text index is automatically
|
||||||
updated. This is easily done using:</p>
|
updated. This is easily done using:</p>
|
||||||
<pre>
|
<pre> CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
||||||
CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
|
||||||
FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxFTI, strMessage);
|
FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxFTI, strMessage);
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Or if you are indexing both strMessage and strTopic you
|
<p>Or if you are indexing both strMessage and strTopic you
|
||||||
should instead do:</p>
|
should instead do:</p>
|
||||||
<pre>
|
<pre> CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
||||||
CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
|
||||||
FOR EACH ROW EXECUTE PROCEDURE
|
FOR EACH ROW EXECUTE PROCEDURE
|
||||||
tsearch2(idxFTI, strTopic, strMessage);
|
tsearch2(idxFTI, strTopic, strMessage);
|
||||||
</pre>
|
</pre>
|
||||||
@ -490,15 +456,13 @@
|
|||||||
the tsearch2 function. Lets say we want to create a function to
|
the tsearch2 function. Lets say we want to create a function to
|
||||||
remove certain characters (like the @ symbol from all
|
remove certain characters (like the @ symbol from all
|
||||||
text).</p>
|
text).</p>
|
||||||
<pre>
|
<pre> CREATE FUNCTION dropatsymbol(text)
|
||||||
CREATE FUNCTION dropatsymbol(text)
|
|
||||||
RETURNS text AS 'select replace($1, \'@\', \' \');' LANGUAGE SQL;
|
RETURNS text AS 'select replace($1, \'@\', \' \');' LANGUAGE SQL;
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Now we can use this function within the tsearch2 function on
|
<p>Now we can use this function within the tsearch2 function on
|
||||||
the trigger.</p>
|
the trigger.</p>
|
||||||
<pre>
|
<pre> DROP TRIGGER tsvectorupdate ON tblmessages;
|
||||||
DROP TRIGGER tsvectorupdate ON tblmessages;
|
|
||||||
CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON tblMessages
|
||||||
FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxFTI, dropatsymbol, strMessage);
|
FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxFTI, dropatsymbol, strMessage);
|
||||||
INSERT INTO tblmessages VALUES (69, 'Attempt for dropatsymbol', 'Test@test.com');
|
INSERT INTO tblmessages VALUES (69, 'Attempt for dropatsymbol', 'Test@test.com');
|
||||||
@ -513,8 +477,7 @@
|
|||||||
locale of the server. All you have to do is change your default
|
locale of the server. All you have to do is change your default
|
||||||
configuration, or add a new one for your specific locale. See
|
configuration, or add a new one for your specific locale. See
|
||||||
the section on TSEARCH2 CONFIGURATION.</p>
|
the section on TSEARCH2 CONFIGURATION.</p>
|
||||||
<pre class="real">
|
<pre class="real"> SELECT * FROM tblmessages WHERE intindex = 69;
|
||||||
SELECT * FROM tblmessages WHERE intindex = 69;
|
|
||||||
|
|
||||||
intindex | strtopic | strmessage | idxfti
|
intindex | strtopic | strmessage | idxfti
|
||||||
----------+--------------------------+---------------+-----------------------
|
----------+--------------------------+---------------+-----------------------
|
||||||
@ -540,8 +503,7 @@ in the tsvector column.
|
|||||||
<p>Lets search the indexed data for the word "Test". I indexed
|
<p>Lets search the indexed data for the word "Test". I indexed
|
||||||
based on the the concatenation of the strTopic, and the
|
based on the the concatenation of the strTopic, and the
|
||||||
strMessage:</p>
|
strMessage:</p>
|
||||||
<pre>
|
<pre> SELECT intindex, strtopic FROM tblmessages
|
||||||
SELECT intindex, strtopic FROM tblmessages
|
|
||||||
WHERE idxfti @@ 'test'::tsquery;
|
WHERE idxfti @@ 'test'::tsquery;
|
||||||
intindex | strtopic
|
intindex | strtopic
|
||||||
----------+---------------
|
----------+---------------
|
||||||
@ -553,8 +515,7 @@ in the tsvector column.
|
|||||||
"Testing Topic". Notice that the word I search for was all
|
"Testing Topic". Notice that the word I search for was all
|
||||||
lowercase. Let's see what happens when I query for uppercase
|
lowercase. Let's see what happens when I query for uppercase
|
||||||
"Test".</p>
|
"Test".</p>
|
||||||
<pre>
|
<pre> SELECT intindex, strtopic FROM tblmessages
|
||||||
SELECT intindex, strtopic FROM tblmessages
|
|
||||||
WHERE idxfti @@ 'Test'::tsquery;
|
WHERE idxfti @@ 'Test'::tsquery;
|
||||||
intindex | strtopic
|
intindex | strtopic
|
||||||
----------+----------
|
----------+----------
|
||||||
@ -570,8 +531,7 @@ in the tsvector column.
|
|||||||
<p>Most likely the best way to query the field is to use the
|
<p>Most likely the best way to query the field is to use the
|
||||||
to_tsquery function on the right hand side of the @@ operator
|
to_tsquery function on the right hand side of the @@ operator
|
||||||
like this:</p>
|
like this:</p>
|
||||||
<pre>
|
<pre> SELECT intindex, strtopic FROM tblmessages
|
||||||
SELECT intindex, strtopic FROM tblmessages
|
|
||||||
WHERE idxfti @@ to_tsquery('default', 'Test | Zeppelin');
|
WHERE idxfti @@ to_tsquery('default', 'Test | Zeppelin');
|
||||||
intindex | strtopic
|
intindex | strtopic
|
||||||
----------+--------------------
|
----------+--------------------
|
||||||
@ -592,8 +552,7 @@ in the tsvector column.
|
|||||||
a way around which doesn't appear to have a significant impact
|
a way around which doesn't appear to have a significant impact
|
||||||
on query time, and that is to use a query such as the
|
on query time, and that is to use a query such as the
|
||||||
following:</p>
|
following:</p>
|
||||||
<pre>
|
<pre> SELECT intindex, strTopic FROM tblmessages
|
||||||
SELECT intindex, strTopic FROM tblmessages
|
|
||||||
WHERE idxfti @@ to_tsquery('default', 'gettysburg & address')
|
WHERE idxfti @@ to_tsquery('default', 'gettysburg & address')
|
||||||
AND strMessage ~* '.*men are created equal.*';
|
AND strMessage ~* '.*men are created equal.*';
|
||||||
intindex | strtopic
|
intindex | strtopic
|
||||||
@ -626,8 +585,7 @@ in the tsvector column.
|
|||||||
english stemming. We could edit the file
|
english stemming. We could edit the file
|
||||||
:'/usr/local/pgsql/share/english.stop' and add a word to the
|
:'/usr/local/pgsql/share/english.stop' and add a word to the
|
||||||
list. I edited mine to exclude my name from indexing:</p>
|
list. I edited mine to exclude my name from indexing:</p>
|
||||||
<pre>
|
<pre> - Edit /usr/local/pgsql/share/english.stop
|
||||||
- Edit /usr/local/pgsql/share/english.stop
|
|
||||||
- Add 'andy' to the list
|
- Add 'andy' to the list
|
||||||
- Save the file.
|
- Save the file.
|
||||||
</pre>
|
</pre>
|
||||||
@ -638,16 +596,14 @@ in the tsvector column.
|
|||||||
connected to the DB while editing the stop words, you will need
|
connected to the DB while editing the stop words, you will need
|
||||||
to end the current session and re-connect. When you re-connect
|
to end the current session and re-connect. When you re-connect
|
||||||
to the database, 'andy' is no longer indexed:</p>
|
to the database, 'andy' is no longer indexed:</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('default', 'Andy');
|
||||||
SELECT to_tsvector('default', 'Andy');
|
|
||||||
to_tsvector
|
to_tsvector
|
||||||
------------
|
------------
|
||||||
(1 row)
|
(1 row)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Originally I would get the result :</p>
|
<p>Originally I would get the result :</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('default', 'Andy');
|
||||||
SELECT to_tsvector('default', 'Andy');
|
|
||||||
to_tsvector
|
to_tsvector
|
||||||
------------
|
------------
|
||||||
'andi':1
|
'andi':1
|
||||||
@ -660,8 +616,7 @@ in the tsvector column.
|
|||||||
'simple', the results would be different. There are no stop
|
'simple', the results would be different. There are no stop
|
||||||
words for the simple dictionary. It will just convert to lower
|
words for the simple dictionary. It will just convert to lower
|
||||||
case, and index every unique word.</p>
|
case, and index every unique word.</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('simple', 'Andy andy The the in out');
|
||||||
SELECT to_tsvector('simple', 'Andy andy The the in out');
|
|
||||||
to_tsvector
|
to_tsvector
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
'in':5 'out':6 'the':3,4 'andy':1,2
|
'in':5 'out':6 'the':3,4 'andy':1,2
|
||||||
@ -672,8 +627,7 @@ in the tsvector column.
|
|||||||
into the actual configuration of tsearch2. In the examples in
|
into the actual configuration of tsearch2. In the examples in
|
||||||
this document the configuration has always been specified when
|
this document the configuration has always been specified when
|
||||||
using the tsearch2 functions:</p>
|
using the tsearch2 functions:</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('default', 'Testing the default config');
|
||||||
SELECT to_tsvector('default', 'Testing the default config');
|
|
||||||
SELECT to_tsvector('simple', 'Example of simple Config');
|
SELECT to_tsvector('simple', 'Example of simple Config');
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -682,8 +636,7 @@ in the tsvector column.
|
|||||||
contains both the 'default' configurations based on the 'C'
|
contains both the 'default' configurations based on the 'C'
|
||||||
locale. And the 'simple' configuration which is not based on
|
locale. And the 'simple' configuration which is not based on
|
||||||
any locale.</p>
|
any locale.</p>
|
||||||
<pre>
|
<pre> SELECT * from pg_ts_cfg;
|
||||||
SELECT * from pg_ts_cfg;
|
|
||||||
ts_name | prs_name | locale
|
ts_name | prs_name | locale
|
||||||
-----------------+----------+--------------
|
-----------------+----------+--------------
|
||||||
default | default | C
|
default | default | C
|
||||||
@ -706,8 +659,7 @@ in the tsvector column.
|
|||||||
configuration or just use one that already exists. If I do not
|
configuration or just use one that already exists. If I do not
|
||||||
specify which configuration to use in the to_tsvector function,
|
specify which configuration to use in the to_tsvector function,
|
||||||
I receive the following error.</p>
|
I receive the following error.</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('learning tsearch is like going to school');
|
||||||
SELECT to_tsvector('learning tsearch is like going to school');
|
|
||||||
ERROR: Can't find tsearch config by locale
|
ERROR: Can't find tsearch config by locale
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -716,8 +668,7 @@ in the tsvector column.
|
|||||||
into the pg_ts_cfg table. We will call the configuration
|
into the pg_ts_cfg table. We will call the configuration
|
||||||
'default_english', with the default parser and use the locale
|
'default_english', with the default parser and use the locale
|
||||||
'en_US'.</p>
|
'en_US'.</p>
|
||||||
<pre>
|
<pre> INSERT INTO pg_ts_cfg (ts_name, prs_name, locale)
|
||||||
INSERT INTO pg_ts_cfg (ts_name, prs_name, locale)
|
|
||||||
VALUES ('default_english', 'default', 'en_US');
|
VALUES ('default_english', 'default', 'en_US');
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -732,15 +683,14 @@ in the tsvector column.
|
|||||||
tsearch2.sql</p>
|
tsearch2.sql</p>
|
||||||
|
|
||||||
<p>Lets take a first look at the pg_ts_dict table</p>
|
<p>Lets take a first look at the pg_ts_dict table</p>
|
||||||
<pre>
|
<pre> ftstest=# \d pg_ts_dict
|
||||||
ftstest=# \d pg_ts_dict
|
|
||||||
Table "public.pg_ts_dict"
|
Table "public.pg_ts_dict"
|
||||||
Column | Type | Modifiers
|
Column | Type | Modifiers
|
||||||
-----------------+---------+-----------
|
-----------------+---------+-----------
|
||||||
dict_name | text | not null
|
dict_name | text | not null
|
||||||
dict_init | oid |
|
dict_init | oid |
|
||||||
dict_initoption | text |
|
dict_initoption | text |
|
||||||
dict_lemmatize | oid | not null
|
dict_lexize | oid | not null
|
||||||
dict_comment | text |
|
dict_comment | text |
|
||||||
Indexes: pg_ts_dict_idx unique btree (dict_name)
|
Indexes: pg_ts_dict_idx unique btree (dict_name)
|
||||||
</pre>
|
</pre>
|
||||||
@ -763,28 +713,57 @@ in the tsvector column.
|
|||||||
ISpell. We will assume you have ISpell installed on you
|
ISpell. We will assume you have ISpell installed on you
|
||||||
machine. (in /usr/local/lib)</p>
|
machine. (in /usr/local/lib)</p>
|
||||||
|
|
||||||
<p>First lets register the dictionary(ies) to use from ISpell.
|
<p>There has been some confusion in the past as to which files
|
||||||
We will use the english dictionary from ISpell. We insert the
|
are used from ISpell. ISpell operates using a hash file. This
|
||||||
paths to the relevant ISpell dictionary (*.hash) and affixes
|
is a binary file created by the ISpell command line utility
|
||||||
(*.aff) files. There seems to be some question as to which
|
"buildhash". This utility accepts a file containing the words
|
||||||
ISpell files are to be used. I installed ISpell from the latest
|
from the dictionary, and the affixes file and the output is the
|
||||||
sources on my computer. The installation installed the
|
hash file. The default installation of ISPell installs the
|
||||||
dictionary files with an extension of *.hash. Some
|
english hash file english.hash, which is the exact same file as
|
||||||
installations install with an extension of *.dict As far as I
|
american.hash. ISpell uses this as the fallback dictionary to
|
||||||
know the two extensions are equivilant. So *.hash ==
|
use.</p>
|
||||||
*.dict.</p>
|
|
||||||
|
|
||||||
<p>We will also continue to use the english word stop file that
|
<p>This hash file is not what tsearch2 requires as the ISpell
|
||||||
|
interface. The file(s) needed are those used to create the
|
||||||
|
hash. Tsearch uses the dictionary words for morphology, so the
|
||||||
|
listing is needed not spellchecking. Regardless, these files
|
||||||
|
are included in the ISpell sources, and you can use them to
|
||||||
|
integrate into tsearch2. This is not complicated, but is not
|
||||||
|
very obvious to begin with. The tsearch2 ISpell interface needs
|
||||||
|
only the listing of dictionary words, it will parse and load
|
||||||
|
those words, and use the ISpell dictionary for lexem
|
||||||
|
processing.</p>
|
||||||
|
|
||||||
|
<p>I found the ISPell make system to be very finicky. Their
|
||||||
|
documentation actually states this to be the case. So I just
|
||||||
|
did things the command line way. In the ISpell source tree
|
||||||
|
under langauges/english there are several files in this
|
||||||
|
directory. For a complete description, please read the ISpell
|
||||||
|
README. Basically for the english dictionary there is the
|
||||||
|
option to create the small, medium, large and extra large
|
||||||
|
dictionaries. The medium dictionary is recommended. If the make
|
||||||
|
system is configured correctly, it would build and install the
|
||||||
|
english.has file from the medium size dictionary. Since we are
|
||||||
|
only concerned with the dictionary word listing ... it can be
|
||||||
|
created from the /languages/english directory with the
|
||||||
|
following command:</p>
|
||||||
|
<pre> sort -u -t/ +0f -1 +0 -T /usr/tmp -o english.med english.0 english.1
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>This will create a file called english.med. You can copy
|
||||||
|
this file to whever you like. I place mine in /usr/local/lib so
|
||||||
|
it coincides with the ISpell hash files. You can now add the
|
||||||
|
tsearch2 configuration entry for the ISpell english dictionary.
|
||||||
|
We will also continue to use the english word stop file that
|
||||||
was installed for the en_stem dictionary. You could use a
|
was installed for the en_stem dictionary. You could use a
|
||||||
different one if you like. The ISpell configuration is based on
|
different one if you like. The ISpell configuration is based on
|
||||||
the "ispell_template" dictionary installed by default with
|
the "ispell_template" dictionary installed by default with
|
||||||
tsearch2. We will use the OIDs to the stored procedures from
|
tsearch2. We will use the OIDs to the stored procedures from
|
||||||
the row where the dict_name = 'ispell_template'.</p>
|
the row where the dict_name = 'ispell_template'.</p>
|
||||||
<pre>
|
<pre> INSERT INTO pg_ts_dict
|
||||||
INSERT INTO pg_ts_dict
|
|
||||||
(SELECT 'en_ispell',
|
(SELECT 'en_ispell',
|
||||||
dict_init,
|
dict_init,
|
||||||
'DictFile="/usr/local/lib/english.hash",'
|
'DictFile="/usr/local/lib/english.med",'
|
||||||
'AffFile="/usr/local/lib/english.aff",'
|
'AffFile="/usr/local/lib/english.aff",'
|
||||||
'StopFile="/usr/local/pgsql/share/english.stop"',
|
'StopFile="/usr/local/pgsql/share/english.stop"',
|
||||||
dict_lexize
|
dict_lexize
|
||||||
@ -792,6 +771,50 @@ in the tsvector column.
|
|||||||
WHERE dict_name = 'ispell_template');
|
WHERE dict_name = 'ispell_template');
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<p>Now that we have a dictionary we can specify it's use in a
|
||||||
|
query to get a lexem. For this we will use the lexize function.
|
||||||
|
The lexize function takes the name of the dictionary to use as
|
||||||
|
an argument. Just as the other tsearch2 functions operate.</p>
|
||||||
|
<pre> SELECT lexize('en_ispell', 'program');
|
||||||
|
lexize
|
||||||
|
-----------
|
||||||
|
{program}
|
||||||
|
(1 row)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>If you wanted to always use the ISpell english dictionary
|
||||||
|
you have installed, you can configure tsearch2 to always use a
|
||||||
|
specific dictionary.</p>
|
||||||
|
<pre> SELCECT set_curdict('en_ispell');
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Lexize is meant to turn a word into a lexem. It is possible
|
||||||
|
to receive more than one lexem returned for a single word.</p>
|
||||||
|
<pre> SELECT lexize('en_ispell', 'conditionally');
|
||||||
|
lexize
|
||||||
|
-----------------------------
|
||||||
|
{conditionally,conditional}
|
||||||
|
(1 row)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>The lexize function is not meant to take a full string as an
|
||||||
|
argument to return lexems for. If you passed in an entire
|
||||||
|
sentence, it attempts to find that entire sentence in the
|
||||||
|
dictionary. SInce the dictionary contains only words, you will
|
||||||
|
receive an empty result set back.</p>
|
||||||
|
<pre> SELECT lexize('en_ispell', 'This is a senctece to lexize');
|
||||||
|
lexize
|
||||||
|
--------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
If you parse a lexem from a word not in the dictionary, then you will receive an empty result. This makes sense because the word "tsearch" is not int the english dictionary. You can create your own additions to the dictionary if you like. This may be useful for scientific or technical glossaries that need to be indexed. SELECT lexize('en_ispell', 'tsearch'); lexize -------- (1 row)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>This is not to say that tsearch will be ignored when adding
|
||||||
|
text information to the the tsvector index column. This will be
|
||||||
|
explained in greater detail with the table pg_ts_cfgmap.</p>
|
||||||
|
|
||||||
<p>Next we need to set up the configuration for mapping the
|
<p>Next we need to set up the configuration for mapping the
|
||||||
dictionay use to the lexxem parsings. This will be done by
|
dictionay use to the lexxem parsings. This will be done by
|
||||||
altering the pg_ts_cfgmap table. We will insert several rows,
|
altering the pg_ts_cfgmap table. We will insert several rows,
|
||||||
@ -799,8 +822,7 @@ in the tsvector column.
|
|||||||
configured for use within tsearch2. There are several type of
|
configured for use within tsearch2. There are several type of
|
||||||
lexims we would be concerned with forcing the use of the ISpell
|
lexims we would be concerned with forcing the use of the ISpell
|
||||||
dictionary.</p>
|
dictionary.</p>
|
||||||
<pre>
|
<pre> INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name)
|
||||||
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name)
|
|
||||||
VALUES ('default_english', 'lhword', '{en_ispell,en_stem}');
|
VALUES ('default_english', 'lhword', '{en_ispell,en_stem}');
|
||||||
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name)
|
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name)
|
||||||
VALUES ('default_english', 'lpart_hword', '{en_ispell,en_stem}');
|
VALUES ('default_english', 'lpart_hword', '{en_ispell,en_stem}');
|
||||||
@ -818,8 +840,7 @@ in the tsvector column.
|
|||||||
<p>There are several other lexem types used that we do not need
|
<p>There are several other lexem types used that we do not need
|
||||||
to specify as using the ISpell dictionary. We can simply insert
|
to specify as using the ISpell dictionary. We can simply insert
|
||||||
values using the 'simple' stemming process dictionary.</p>
|
values using the 'simple' stemming process dictionary.</p>
|
||||||
<pre>
|
<pre> INSERT INTO pg_ts_cfgmap
|
||||||
INSERT INTO pg_ts_cfgmap
|
|
||||||
VALUES ('default_english', 'url', '{simple}');
|
VALUES ('default_english', 'url', '{simple}');
|
||||||
INSERT INTO pg_ts_cfgmap
|
INSERT INTO pg_ts_cfgmap
|
||||||
VALUES ('default_english', 'host', '{simple}');
|
VALUES ('default_english', 'host', '{simple}');
|
||||||
@ -857,8 +878,7 @@ in the tsvector column.
|
|||||||
complete. We have successfully created a new tsearch2
|
complete. We have successfully created a new tsearch2
|
||||||
configuration. At the same time we have also set the new
|
configuration. At the same time we have also set the new
|
||||||
configuration to be our default for en_US locale.</p>
|
configuration to be our default for en_US locale.</p>
|
||||||
<pre>
|
<pre> SELECT to_tsvector('default_english',
|
||||||
SELECT to_tsvector('default_english',
|
|
||||||
'learning tsearch is like going to school');
|
'learning tsearch is like going to school');
|
||||||
to_tsvector
|
to_tsvector
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
@ -870,12 +890,37 @@ in the tsvector column.
|
|||||||
(1 row)
|
(1 row)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<p>Notice here that words like "tsearch" are still parsed and
|
||||||
|
indexed in the tsvector column. There is a lexem returned for
|
||||||
|
the word becuase in the configuration mapping table, we specify
|
||||||
|
words to be used from the 'en_ispell' dictionary first, but as
|
||||||
|
a fallback to use the 'en_stem' dictionary. Therefore a lexem
|
||||||
|
is not returned from en_ispell, but is returned from en_stem,
|
||||||
|
and added to the tsvector.</p>
|
||||||
|
<pre> SELECT to_tsvector('learning tsearch is like going to computer school');
|
||||||
|
to_tsvector
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
'go':5 'like':4 'learn':1 'school':8 'compute':7 'tsearch':2 'computer':7
|
||||||
|
(1 row)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Notice in this last example I added the word "computer" to
|
||||||
|
the text to be converted into a tsvector. Because we have setup
|
||||||
|
our default configuration to use the ISpell english dictionary,
|
||||||
|
the words are lexized, and computer returns 2 lexems at the
|
||||||
|
same position. 'compute':7 and 'computer':7 are now both
|
||||||
|
indexed for the word computer.</p>
|
||||||
|
|
||||||
|
<p>You can create additional dictionarynlists, or use the extra
|
||||||
|
large dictionary from ISpell. You can read through the ISpell
|
||||||
|
documents, and source tree to make modifications as you see
|
||||||
|
fit.</p>
|
||||||
|
|
||||||
<p>In the case that you already have a configuration set for
|
<p>In the case that you already have a configuration set for
|
||||||
the locale, and you are changing it to your new dictionary
|
the locale, and you are changing it to your new dictionary
|
||||||
configuration. You will have to set the old locale to NULL. If
|
configuration. You will have to set the old locale to NULL. If
|
||||||
we are using the 'C' locale then we would do this:</p>
|
we are using the 'C' locale then we would do this:</p>
|
||||||
<pre>
|
<pre> UPDATE pg_ts_cfg SET locale=NULL WHERE locale = 'C';
|
||||||
UPDATE pg_ts_cfg SET locale=NULL WHERE locale = 'C';
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>That about wraps up the configuration of tsearch2. There is
|
<p>That about wraps up the configuration of tsearch2. There is
|
||||||
@ -917,38 +962,32 @@ in the tsvector column.
|
|||||||
<p>1) Backup any global database objects such as users and
|
<p>1) Backup any global database objects such as users and
|
||||||
groups (this step is usually only necessary when you will be
|
groups (this step is usually only necessary when you will be
|
||||||
restoring to a virgin system)</p>
|
restoring to a virgin system)</p>
|
||||||
<pre>
|
<pre> pg_dumpall -g > GLOBALobjects.sql
|
||||||
pg_dumpall -g > GLOBALobjects.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>2) Backup the full database schema using pg_dump</p>
|
<p>2) Backup the full database schema using pg_dump</p>
|
||||||
<pre>
|
<pre> pg_dump -s DATABASE > DATABASEschema.sql
|
||||||
pg_dump -s DATABASE > DATABASEschema.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>3) Backup the full database using pg_dump</p>
|
<p>3) Backup the full database using pg_dump</p>
|
||||||
<pre>
|
<pre> pg_dump -Fc DATABASE > DATABASEdata.tar
|
||||||
pg_dump -Fc DATABASE > DATABASEdata.tar
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>To Restore a PostgreSQL database that uses the tsearch2
|
<p>To Restore a PostgreSQL database that uses the tsearch2
|
||||||
module:</p>
|
module:</p>
|
||||||
|
|
||||||
<p>1) Create the blank database</p>
|
<p>1) Create the blank database</p>
|
||||||
<pre>
|
<pre> createdb DATABASE
|
||||||
createdb DATABASE
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>2) Restore any global database objects such as users and
|
<p>2) Restore any global database objects such as users and
|
||||||
groups (this step is usually only necessary when you will be
|
groups (this step is usually only necessary when you will be
|
||||||
restoring to a virgin system)</p>
|
restoring to a virgin system)</p>
|
||||||
<pre>
|
<pre> psql DATABASE < GLOBALobjects.sql
|
||||||
psql DATABASE < GLOBALobjects.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>3) Create the tsearch2 objects, functions and operators</p>
|
<p>3) Create the tsearch2 objects, functions and operators</p>
|
||||||
<pre>
|
<pre> psql DATABASE < tsearch2.sql
|
||||||
psql DATABASE < tsearch2.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>4) Edit the backed up database schema and delete all SQL
|
<p>4) Edit the backed up database schema and delete all SQL
|
||||||
@ -957,13 +996,11 @@ in the tsvector column.
|
|||||||
tsvector types. If your not sure what these are, they are the
|
tsvector types. If your not sure what these are, they are the
|
||||||
ones listed in tsearch2.sql. Then restore the edited schema to
|
ones listed in tsearch2.sql. Then restore the edited schema to
|
||||||
the database</p>
|
the database</p>
|
||||||
<pre>
|
<pre> psql DATABASE < DATABASEschema.sql
|
||||||
psql DATABASE < DATABASEschema.sql
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>5) Restore the data for the database</p>
|
<p>5) Restore the data for the database</p>
|
||||||
<pre>
|
<pre> pg_restore -N -a -d DATABASE DATABASEdata.tar
|
||||||
pg_restore -N -a -d DATABASE DATABASEdata.tar
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>If you get any errors in step 4, it will most likely be
|
<p>If you get any errors in step 4, it will most likely be
|
||||||
@ -971,5 +1008,4 @@ in the tsvector column.
|
|||||||
tsearch2.sql. Any errors in step 5 will mean the database
|
tsearch2.sql. Any errors in step 5 will mean the database
|
||||||
schema was probably restored wrongly.</p>
|
schema was probably restored wrongly.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body></html>
|
||||||
</html>
|
|
@ -569,6 +569,30 @@ select to_tsquery('default', '\'the wether\':dc & \' sKies \':BC ');
|
|||||||
'wether':CD & 'sky':BC
|
'wether':CD & 'sky':BC
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
select to_tsquery('asd&(and|fghj)');
|
||||||
|
to_tsquery
|
||||||
|
----------------
|
||||||
|
'asd' & 'fghj'
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
select to_tsquery('(asd&and)|fghj');
|
||||||
|
to_tsquery
|
||||||
|
----------------
|
||||||
|
'asd' | 'fghj'
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
select to_tsquery('(asd&!and)|fghj');
|
||||||
|
to_tsquery
|
||||||
|
----------------
|
||||||
|
'asd' | 'fghj'
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
select to_tsquery('(the|and&(i&1))&fghj');
|
||||||
|
to_tsquery
|
||||||
|
--------------
|
||||||
|
'1' & 'fghj'
|
||||||
|
(1 row)
|
||||||
|
|
||||||
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca';
|
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca';
|
||||||
?column?
|
?column?
|
||||||
----------
|
----------
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
# $Header: /cvsroot/pgsql/contrib/tsearch2/ispell/Attic/Makefile,v 1.3.2.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
|
|
||||||
subdir = contrib/tsearch2/ispell
|
subdir = contrib/tsearch2/ispell
|
||||||
top_builddir = ../../..
|
top_builddir = ../../..
|
||||||
include $(top_builddir)/src/Makefile.global
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
|
|
||||||
override CPPFLAGS := -I$(srcdir) -I$(srcdir)/.. $(CPPFLAGS)
|
PG_CPPFLAGS = -I$(srcdir)/.. $(CPPFLAGS)
|
||||||
override CFLAGS += $(CFLAGS_SL)
|
override CFLAGS += $(CFLAGS_SL)
|
||||||
|
|
||||||
SUBOBJS = spell.o
|
SUBOBJS = spell.o
|
||||||
@ -16,6 +18,3 @@ SUBSYS.o: $(SUBOBJS)
|
|||||||
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS)
|
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS)
|
||||||
|
|
||||||
include $(top_srcdir)/contrib/contrib-global.mk
|
include $(top_srcdir)/contrib/contrib-global.mk
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,15 +52,6 @@ Datum to_tsquery_name(PG_FUNCTION_ARGS);
|
|||||||
PG_FUNCTION_INFO_V1(to_tsquery_current);
|
PG_FUNCTION_INFO_V1(to_tsquery_current);
|
||||||
Datum to_tsquery_current(PG_FUNCTION_ARGS);
|
Datum to_tsquery_current(PG_FUNCTION_ARGS);
|
||||||
|
|
||||||
#define END 0
|
|
||||||
#define ERR 1
|
|
||||||
#define VAL 2
|
|
||||||
#define OPR 3
|
|
||||||
#define OPEN 4
|
|
||||||
#define CLOSE 5
|
|
||||||
#define VALTRUE 6 /* for stop words */
|
|
||||||
#define VALFALSE 7
|
|
||||||
|
|
||||||
/* parser's states */
|
/* parser's states */
|
||||||
#define WAITOPERAND 1
|
#define WAITOPERAND 1
|
||||||
#define WAITOPERATOR 2
|
#define WAITOPERATOR 2
|
||||||
@ -293,7 +284,7 @@ pushval_morph(QPRS_STATE * state, int typeval, char *strval, int lenval, int2 we
|
|||||||
|
|
||||||
/* XXX */
|
/* XXX */
|
||||||
if (prs.curwords == 0)
|
if (prs.curwords == 0)
|
||||||
pushval_asis(state, VALTRUE, 0, 0, 0);
|
pushval_asis(state, VALSTOP, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STACKDEPTH 32
|
#define STACKDEPTH 32
|
||||||
@ -526,7 +517,7 @@ findoprnd(ITEM * ptr, int4 *pos)
|
|||||||
elog(DEBUG3, (ptr[*pos].type == OPR) ?
|
elog(DEBUG3, (ptr[*pos].type == OPR) ?
|
||||||
"%d %c" : "%d %d", *pos, ptr[*pos].val);
|
"%d %c" : "%d %d", *pos, ptr[*pos].val);
|
||||||
#endif
|
#endif
|
||||||
if (ptr[*pos].type == VAL || ptr[*pos].type == VALTRUE)
|
if (ptr[*pos].type == VAL || ptr[*pos].type == VALSTOP)
|
||||||
{
|
{
|
||||||
ptr[*pos].left = 0;
|
ptr[*pos].left = 0;
|
||||||
(*pos)++;
|
(*pos)++;
|
||||||
|
@ -46,8 +46,7 @@ typedef struct
|
|||||||
#define OPR 3
|
#define OPR 3
|
||||||
#define OPEN 4
|
#define OPEN 4
|
||||||
#define CLOSE 5
|
#define CLOSE 5
|
||||||
#define VALTRUE 6 /* for stop words */
|
#define VALSTOP 6 /* for stop words */
|
||||||
#define VALFALSE 7
|
|
||||||
|
|
||||||
bool TS_execute(ITEM * curitem, void *checkval,
|
bool TS_execute(ITEM * curitem, void *checkval,
|
||||||
bool calcnot, bool (*chkcond) (void *checkval, ITEM * val));
|
bool calcnot, bool (*chkcond) (void *checkval, ITEM * val));
|
||||||
|
@ -177,6 +177,7 @@ clean_NOT_v2(ITEM * ptr, int4 *len)
|
|||||||
#define V_UNKNOWN 0
|
#define V_UNKNOWN 0
|
||||||
#define V_TRUE 1
|
#define V_TRUE 1
|
||||||
#define V_FALSE 2
|
#define V_FALSE 2
|
||||||
|
#define V_STOP 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean query tree from values which is always in
|
* Clean query tree from values which is always in
|
||||||
@ -190,10 +191,10 @@ clean_fakeval_intree(NODE * node, char *result)
|
|||||||
|
|
||||||
if (node->valnode->type == VAL)
|
if (node->valnode->type == VAL)
|
||||||
return node;
|
return node;
|
||||||
else if (node->valnode->type == VALTRUE)
|
else if (node->valnode->type == VALSTOP)
|
||||||
{
|
{
|
||||||
pfree(node);
|
pfree(node);
|
||||||
*result = V_TRUE;
|
*result = V_STOP;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,65 +204,29 @@ clean_fakeval_intree(NODE * node, char *result)
|
|||||||
node->right = clean_fakeval_intree(node->right, &rresult);
|
node->right = clean_fakeval_intree(node->right, &rresult);
|
||||||
if (!node->right)
|
if (!node->right)
|
||||||
{
|
{
|
||||||
*result = (rresult == V_TRUE) ? V_FALSE : V_TRUE;
|
*result = V_STOP;
|
||||||
freetree(node);
|
freetree(node);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (node->valnode->val == (int4) '|')
|
|
||||||
{
|
|
||||||
NODE *res = node;
|
|
||||||
|
|
||||||
node->left = clean_fakeval_intree(node->left, &lresult);
|
|
||||||
node->right = clean_fakeval_intree(node->right, &rresult);
|
|
||||||
if (lresult == V_TRUE || rresult == V_TRUE)
|
|
||||||
{
|
|
||||||
freetree(node);
|
|
||||||
*result = V_TRUE;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (lresult == V_FALSE && rresult == V_FALSE)
|
|
||||||
{
|
|
||||||
freetree(node);
|
|
||||||
*result = V_FALSE;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (lresult == V_FALSE)
|
|
||||||
{
|
|
||||||
res = node->right;
|
|
||||||
pfree(node);
|
|
||||||
}
|
|
||||||
else if (rresult == V_FALSE)
|
|
||||||
{
|
|
||||||
res = node->left;
|
|
||||||
pfree(node);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NODE *res = node;
|
NODE *res = node;
|
||||||
|
|
||||||
node->left = clean_fakeval_intree(node->left, &lresult);
|
node->left = clean_fakeval_intree(node->left, &lresult);
|
||||||
node->right = clean_fakeval_intree(node->right, &rresult);
|
node->right = clean_fakeval_intree(node->right, &rresult);
|
||||||
if (lresult == V_FALSE || rresult == V_FALSE)
|
if (lresult == V_STOP && rresult == V_STOP)
|
||||||
{
|
{
|
||||||
freetree(node);
|
freetree(node);
|
||||||
*result = V_FALSE;
|
*result = V_STOP;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if (lresult == V_TRUE && rresult == V_TRUE)
|
else if (lresult == V_STOP)
|
||||||
{
|
|
||||||
freetree(node);
|
|
||||||
*result = V_TRUE;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (lresult == V_TRUE)
|
|
||||||
{
|
{
|
||||||
res = node->right;
|
res = node->right;
|
||||||
pfree(node);
|
pfree(node);
|
||||||
}
|
}
|
||||||
else if (rresult == V_TRUE)
|
else if (rresult == V_STOP)
|
||||||
{
|
{
|
||||||
res = node->left;
|
res = node->left;
|
||||||
pfree(node);
|
pfree(node);
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
# $Header: /cvsroot/pgsql/contrib/tsearch2/snowball/Attic/Makefile,v 1.3.2.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
|
|
||||||
subdir = contrib/tsearch2/snowball
|
subdir = contrib/tsearch2/snowball
|
||||||
top_builddir = ../../..
|
top_builddir = ../../..
|
||||||
include $(top_builddir)/src/Makefile.global
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
|
|
||||||
override CPPFLAGS := -I$(srcdir) -I$(srcdir)/.. $(CPPFLAGS)
|
PG_CPPFLAGS = -I$(srcdir)/..
|
||||||
override CFLAGS += $(CFLAGS_SL)
|
override CFLAGS += $(CFLAGS_SL)
|
||||||
|
|
||||||
SUBOBJS = english_stem.o api.o russian_stem.o utilities.o
|
SUBOBJS = english_stem.o api.o russian_stem.o utilities.o
|
||||||
@ -16,6 +18,3 @@ SUBSYS.o: $(SUBOBJS)
|
|||||||
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS)
|
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS)
|
||||||
|
|
||||||
include $(top_srcdir)/contrib/contrib-global.mk
|
include $(top_srcdir)/contrib/contrib-global.mk
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,6 +87,10 @@ SELECT length(to_tsvector('default', '345 qwe@efd.r \' http://www.com/ http://ae
|
|||||||
select to_tsquery('default', 'qwe & sKies ');
|
select to_tsquery('default', 'qwe & sKies ');
|
||||||
select to_tsquery('simple', 'qwe & sKies ');
|
select to_tsquery('simple', 'qwe & sKies ');
|
||||||
select to_tsquery('default', '\'the wether\':dc & \' sKies \':BC ');
|
select to_tsquery('default', '\'the wether\':dc & \' sKies \':BC ');
|
||||||
|
select to_tsquery('asd&(and|fghj)');
|
||||||
|
select to_tsquery('(asd&and)|fghj');
|
||||||
|
select to_tsquery('(asd&!and)|fghj');
|
||||||
|
select to_tsquery('(the|and&(i&1))&fghj');
|
||||||
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca';
|
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca';
|
||||||
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:B';
|
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:B';
|
||||||
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:A';
|
select 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:A';
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
# $Header: /cvsroot/pgsql/contrib/tsearch2/wordparser/Attic/Makefile,v 1.3.2.1 2003/09/07 04:36:39 momjian Exp $
|
||||||
|
|
||||||
subdir = contrib/tsearch2/wordparser
|
subdir = contrib/tsearch2/wordparser
|
||||||
top_builddir = ../../..
|
top_builddir = ../../..
|
||||||
include $(top_builddir)/src/Makefile.global
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
|
|
||||||
override CPPFLAGS := -I$(srcdir) -I$(srcdir)/.. $(CPPFLAGS)
|
PG_CPPFLAGS = -I$(srcdir)/..
|
||||||
override CFLAGS += $(CFLAGS_SL)
|
override CFLAGS += $(CFLAGS_SL)
|
||||||
|
|
||||||
SUBOBJS = parser.o deflex.o
|
SUBOBJS = parser.o deflex.o
|
||||||
@ -23,6 +25,3 @@ SUBSYS.o: $(SUBOBJS)
|
|||||||
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS) parser.c
|
EXTRA_CLEAN = SUBSYS.o $(SUBOBJS) parser.c
|
||||||
|
|
||||||
include $(top_srcdir)/contrib/contrib-global.mk
|
include $(top_srcdir)/contrib/contrib-global.mk
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ char *token;
|
|||||||
int tokenlen;
|
int tokenlen;
|
||||||
int tsearch2_yylex(void);
|
int tsearch2_yylex(void);
|
||||||
void start_parse_str(char *, int);
|
void start_parse_str(char *, int);
|
||||||
void start_parse_fh(FILE *, int);
|
|
||||||
void end_parse(void);
|
void end_parse(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,36 +23,6 @@ char *s = NULL; /* to return WHOLE hyphenated-word */
|
|||||||
|
|
||||||
YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */
|
YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */
|
||||||
|
|
||||||
int lrlimit = -1; /* for limiting read from filehandle ( -1 - unlimited read ) */
|
|
||||||
int bytestoread = 0; /* for limiting read from filehandle */
|
|
||||||
|
|
||||||
/* redefine macro for read limited length */
|
|
||||||
#define YY_INPUT(buf,result,max_size) \
|
|
||||||
if ( yy_current_buffer->yy_is_interactive ) { \
|
|
||||||
int c = '*', n; \
|
|
||||||
for ( n = 0; n < max_size && \
|
|
||||||
(c = getc( tsearch2_yyin )) != EOF && c != '\n'; ++n ) \
|
|
||||||
buf[n] = (char) c; \
|
|
||||||
if ( c == '\n' ) \
|
|
||||||
buf[n++] = (char) c; \
|
|
||||||
if ( c == EOF && ferror( tsearch2_yyin ) ) \
|
|
||||||
YY_FATAL_ERROR( "input in flex scanner failed" ); \
|
|
||||||
result = n; \
|
|
||||||
} else { \
|
|
||||||
if ( lrlimit == 0 ) \
|
|
||||||
result=YY_NULL; \
|
|
||||||
else { \
|
|
||||||
if ( lrlimit>0 ) { \
|
|
||||||
bytestoread = ( lrlimit > max_size ) ? max_size : lrlimit; \
|
|
||||||
lrlimit -= bytestoread; \
|
|
||||||
} else \
|
|
||||||
bytestoread = max_size; \
|
|
||||||
if ( ((result = fread( buf, 1, bytestoread, tsearch2_yyin )) == 0) \
|
|
||||||
&& ferror( tsearch2_yyin ) ) \
|
|
||||||
YY_FATAL_ERROR( "input in flex scanner failed" ); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option 8bit
|
%option 8bit
|
||||||
@ -334,13 +304,5 @@ void start_parse_str(char* str, int limit) {
|
|||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start parse from filehandle */
|
|
||||||
void start_parse_fh( FILE* fh, int limit ) {
|
|
||||||
if (buf) end_parse();
|
|
||||||
lrlimit = ( limit ) ? limit : -1;
|
|
||||||
buf = tsearch2_yy_create_buffer( fh, YY_BUF_SIZE );
|
|
||||||
tsearch2_yy_switch_to_buffer( buf );
|
|
||||||
BEGIN INITIAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
8
doc/FAQ
8
doc/FAQ
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Frequently Asked Questions (FAQ) for PostgreSQL
|
Frequently Asked Questions (FAQ) for PostgreSQL
|
||||||
|
|
||||||
Last updated: Fri Jul 25 18:07:30 EDT 2003
|
Last updated: Fri Sep 5 12:42:57 EDT 2003
|
||||||
|
|
||||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||||
|
|
||||||
@ -199,7 +199,8 @@
|
|||||||
|
|
||||||
A native port to MS Win NT/2000/XP is currently being worked on. For
|
A native port to MS Win NT/2000/XP is currently being worked on. For
|
||||||
more details on the current status of PostgreSQL on Windows see
|
more details on the current status of PostgreSQL on Windows see
|
||||||
http://techdocs.postgresql.org/guides/Windows.
|
http://techdocs.postgresql.org/guides/Windows and
|
||||||
|
http://candle.pha.pa.us/main/writings/pgsql/win32.html.
|
||||||
|
|
||||||
There is also a Novell Netware 6 port at http://forge.novell.com.
|
There is also a Novell Netware 6 port at http://forge.novell.com.
|
||||||
|
|
||||||
@ -916,7 +917,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
|||||||
|
|
||||||
Finally, you could use the OID returned from the INSERT statement to
|
Finally, you could use the OID returned from the INSERT statement to
|
||||||
look up the default value, though this is probably the least portable
|
look up the default value, though this is probably the least portable
|
||||||
approach. In Perl, using DBI with Edmund Mergl's DBD::Pg module, the
|
approach, and the oid value will wrap around when it reaches 4
|
||||||
|
billion. In Perl, using DBI with Edmund Mergl's DBD::Pg module, the
|
||||||
oid value is made available via $sth->{pg_oid_status} after
|
oid value is made available via $sth->{pg_oid_status} after
|
||||||
$sth->execute().
|
$sth->execute().
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
Deutsche <20>bersetzung von Ian Barwick (barwick@gmx.net).
|
Deutsche <20>bersetzung von Ian Barwick (barwick@gmx.net).
|
||||||
|
|
||||||
Letzte Aktualisierung der deutschen <20>bersetzung: Di., den 22.07.2003,
|
Letzte Aktualisierung der deutschen <20>bersetzung: Di., den 02.09.2003,
|
||||||
16:20 CET
|
10:00 CET
|
||||||
|
|
||||||
Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
|
Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
|
||||||
Website:
|
Website:
|
||||||
@ -1063,9 +1063,12 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
|
|
||||||
Schlie<69>lich besteht noch die M<>glichkeit, den von einer
|
Schlie<69>lich besteht noch die M<>glichkeit, den von einer
|
||||||
INSERT-Anweisung zur<75>ckgelieferten OID-Wert als einmaligen Wert zu
|
INSERT-Anweisung zur<75>ckgelieferten OID-Wert als einmaligen Wert zu
|
||||||
verwenden. In Perl mit dem DBD::Pg-Modul von Edmund Mergl wird der
|
verwenden. Dieser Ansatz ist allerdings PostgreSQL-spezifisch;
|
||||||
OID-Wert nach einem $sth->excute() <20>ber $sth->{pg_oid_status}
|
au<EFBFBD>erdem wird nach ca. 4 Milliarden Eintr<74>gen der OID-Wert wieder auf
|
||||||
zur<EFBFBD>ckgeliefert.
|
eine kleine Zahl gesetzt, ist also nicht garantiert einmalig.
|
||||||
|
|
||||||
|
In Perl mit dem DBD::Pg-Modul wird der OID-Wert nach einem
|
||||||
|
$sth->excute() <20>ber $sth->{pg_oid_status} zur<75>ckgeliefert.
|
||||||
|
|
||||||
4.15.3) F<>hren currval() und nextval() zu einer Race-Condition mit anderen
|
4.15.3) F<>hren currval() und nextval() zu einer Race-Condition mit anderen
|
||||||
Nutzern?
|
Nutzern?
|
||||||
@ -1278,15 +1281,21 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
4.28) Welche M<>glichkeiten zur Verschl<68>sselung gibt es?
|
4.28) Welche M<>glichkeiten zur Verschl<68>sselung gibt es?
|
||||||
|
|
||||||
* contrib/pgcrypto enth<74>lt diverse Funktionen f<>r die Ben<65>tzung mit
|
* contrib/pgcrypto enth<74>lt diverse Funktionen f<>r die Ben<65>tzung mit
|
||||||
SQL-Abfragen;
|
SQL-Abfragen.
|
||||||
* die einzige M<>glichkeit, Kommunikationen zwischen Client und
|
* Um Verbindungen zwischen dem Server und Client-Anwendungen zu
|
||||||
Server zu verschl<EFBFBD>sseln, ist durch die Anwendung von hostssl in
|
verschl<68>sseln, muss in der Server-Konfigurationsdatei
|
||||||
pg_hba.conf;
|
postgresql.conf die ssl-Option auf true (Voreinstellung: false)
|
||||||
|
gesetzt werden und ein passender host- bzw. hostssl-Eintrag muss
|
||||||
|
in pg_hba.conf vorhanden sein. Zudem muss die sslmode-Einstellung
|
||||||
|
beim Client nicht auf disable gesetzt werden. (Bitte beachten Sie
|
||||||
|
auch, da<64> neben der eingebauten SSL-Unterst<73>tzung verschl<68>sselte
|
||||||
|
Verbindungen auch <20>ber externe Anwendungen wie stunnel oder ssh
|
||||||
|
aufgebaut werden k<>nnen).
|
||||||
* Die Passw<73>rter der Datenbanknutzer werden ab Version 7.3
|
* Die Passw<73>rter der Datenbanknutzer werden ab Version 7.3
|
||||||
automatisch verschl<68>sselt (in fr<66>heren Versionen mu<6D> der Parameter
|
automatisch verschl<68>sselt (in fr<66>heren Versionen mu<6D> der Parameter
|
||||||
PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
|
PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
|
||||||
werden);
|
werden).
|
||||||
* der Server l<>uft auf einem verschl<68>sselten Dateisystem.
|
* Betrieb des Servers auf einem verschl<68>sselten Dateisystem.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
PostgreSQL erweitern
|
PostgreSQL erweitern
|
||||||
@ -1326,10 +1335,15 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
Die englische Vorlage dieser FAQ wird st<73>ndig <20>berarbeitet. Daher
|
Die englische Vorlage dieser FAQ wird st<73>ndig <20>berarbeitet. Daher
|
||||||
liegt die <20>bersetzung nicht immer auf dem aktuellsten Stand.
|
liegt die <20>bersetzung nicht immer auf dem aktuellsten Stand.
|
||||||
|
|
||||||
|
Die aktuellste Version der deutschen <20>bersetzung befindet sich immer
|
||||||
|
unter http://sql-info.de/postgresql/FAQ_german.html. Diese
|
||||||
|
"Arbeitsversion" enth<74>lt eventuell <20>nderungen, die noch nicht auf der
|
||||||
|
PostgreSQL-Website eingebunden worden sind.
|
||||||
|
|
||||||
<20>ber Verbesserungshinweise und Korrekturvorschl<68>ge sowie
|
<20>ber Verbesserungshinweise und Korrekturvorschl<68>ge sowie
|
||||||
Verst<73>ndnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
|
Verst<73>ndnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
|
||||||
allgemeine Fragen zu PostgreSQL gerne entgegen, kann aber leider keine
|
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf
|
||||||
zeitige Antwort garantieren.
|
die Mailing-Listen als schnelle und zuverl<72>ssige Anlaufstellen.
|
||||||
|
|
||||||
Diese <20>bersetzung basiert teilweise auf einer fr<66>heren <20>bersetzung von
|
Diese <20>bersetzung basiert teilweise auf einer fr<66>heren <20>bersetzung von
|
||||||
Karsten Schulz (schulz@linux-systemhaus.de).
|
Karsten Schulz (schulz@linux-systemhaus.de).
|
||||||
|
29
doc/TODO
29
doc/TODO
@ -1,6 +1,6 @@
|
|||||||
TODO list for PostgreSQL
|
TODO list for PostgreSQL
|
||||||
========================
|
========================
|
||||||
Last updated: Tue Aug 12 18:04:15 EDT 2003
|
Last updated: Fri Sep 5 15:52:01 EDT 2003
|
||||||
|
|
||||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ Administration
|
|||||||
* Allow configuration files to be specified in a different directory
|
* Allow configuration files to be specified in a different directory
|
||||||
* -Add start time to pg_stat_activity
|
* -Add start time to pg_stat_activity
|
||||||
* Allow limits on per-db/user connections
|
* Allow limits on per-db/user connections
|
||||||
* Have standalone backend read postgresql.conf
|
* -Have standalone backend read postgresql.conf (Tom)
|
||||||
* Add group object ownership, so groups can rename/drop/grant on objects,
|
* Add group object ownership, so groups can rename/drop/grant on objects,
|
||||||
so we can implement roles
|
so we can implement roles
|
||||||
* Add the concept of dataspaces/tablespaces [tablespaces]
|
* Add the concept of dataspaces/tablespaces [tablespaces]
|
||||||
@ -62,6 +62,8 @@ Administration
|
|||||||
* Allow server log information to be output as INSERT statements
|
* Allow server log information to be output as INSERT statements
|
||||||
* Prevent default re-use of sysids for dropped users and groups
|
* Prevent default re-use of sysids for dropped users and groups
|
||||||
* Prevent dropping user that still owns objects, or auto-drop the objects
|
* Prevent dropping user that still owns objects, or auto-drop the objects
|
||||||
|
* Allow pooled connections to query prepared queries
|
||||||
|
* Allow pooled connections to close all open WITH HOLD cursors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -88,6 +90,10 @@ Data Types
|
|||||||
from making invalid dates valid
|
from making invalid dates valid
|
||||||
* -Prevent month/day swapping of ISO dates to make invalid dates valid
|
* -Prevent month/day swapping of ISO dates to make invalid dates valid
|
||||||
* Have initdb set DateStyle based on locale?
|
* Have initdb set DateStyle based on locale?
|
||||||
|
* Add pg_get_acldef(), pg_get_typedefault(), and pg_get_attrdef()
|
||||||
|
* Add ALTER DOMAIN, AGGREGATE, CONVERSION, SEQUENCE ... OWNER TO
|
||||||
|
* Allow to_char to print localized month names (Karel)
|
||||||
|
|
||||||
|
|
||||||
* ARRAYS
|
* ARRAYS
|
||||||
o Allow nulls in arrays
|
o Allow nulls in arrays
|
||||||
@ -117,6 +123,8 @@ Multi-Language Support
|
|||||||
* Prevent mismatch of frontend/backend encodings from converting bytea
|
* Prevent mismatch of frontend/backend encodings from converting bytea
|
||||||
data from being interpreted as encoded strings
|
data from being interpreted as encoded strings
|
||||||
* -Remove Cyrillic recode support
|
* -Remove Cyrillic recode support
|
||||||
|
* Fix upper()/lower() to work for multibyte encodings
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Views / Rules
|
Views / Rules
|
||||||
@ -142,7 +150,7 @@ Indexes
|
|||||||
INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail
|
INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail
|
||||||
[inheritance]
|
[inheritance]
|
||||||
* Add UNIQUE capability to non-btree indexes
|
* Add UNIQUE capability to non-btree indexes
|
||||||
* Add btree index support for reltime, tinterval, regproc
|
* -Add btree index support for reltime, tinterval, regproc (Tom)
|
||||||
* Add rtree index support for line, lseg, path, point
|
* Add rtree index support for line, lseg, path, point
|
||||||
* -Certain indexes will not shrink, e.g. indexes on ever-increasing
|
* -Certain indexes will not shrink, e.g. indexes on ever-increasing
|
||||||
columns and indexes with many duplicate keys
|
columns and indexes with many duplicate keys
|
||||||
@ -160,7 +168,7 @@ Indexes
|
|||||||
float4, numeric/decimal too [optimizer]
|
float4, numeric/decimal too [optimizer]
|
||||||
* Add FILLFACTOR to btree index creation
|
* Add FILLFACTOR to btree index creation
|
||||||
* Add concurrency to GIST
|
* Add concurrency to GIST
|
||||||
* Improve concurrency of hash indexes (Neil)
|
* -Improve concurrency of hash indexes (Tom)
|
||||||
* Allow a single index to index multiple tables (for inheritance and subtables)
|
* Allow a single index to index multiple tables (for inheritance and subtables)
|
||||||
|
|
||||||
|
|
||||||
@ -188,6 +196,8 @@ Commands
|
|||||||
* -Have SELECT '13 minutes'::interval display zero seconds in ISO datestyle
|
* -Have SELECT '13 minutes'::interval display zero seconds in ISO datestyle
|
||||||
* Prevent COMMENT ON DATABASE from using a database name
|
* Prevent COMMENT ON DATABASE from using a database name
|
||||||
* Add GUC variable to prevent waiting on locks
|
* Add GUC variable to prevent waiting on locks
|
||||||
|
* Allow TRUNCATE ... CASCADE/RESTRICT
|
||||||
|
* Allow PREPARE of cursors
|
||||||
|
|
||||||
|
|
||||||
* ALTER
|
* ALTER
|
||||||
@ -204,6 +214,7 @@ Commands
|
|||||||
o Allow ALTER TABLE to modify column lengths and change to binary
|
o Allow ALTER TABLE to modify column lengths and change to binary
|
||||||
compatible types
|
compatible types
|
||||||
o Add ALTER DATABASE ... OWNER TO newowner
|
o Add ALTER DATABASE ... OWNER TO newowner
|
||||||
|
o Allow ALTER TABLE ... ALTER CONSTRAINT ... RENAME
|
||||||
|
|
||||||
* CLUSTER
|
* CLUSTER
|
||||||
o Automatically maintain clustering on a table
|
o Automatically maintain clustering on a table
|
||||||
@ -267,7 +278,7 @@ Clients
|
|||||||
* -Allow psql to show transaction status if backend protocol changes made
|
* -Allow psql to show transaction status if backend protocol changes made
|
||||||
* -Add schema, cast, and conversion backslash commands to psql (Christopher)
|
* -Add schema, cast, and conversion backslash commands to psql (Christopher)
|
||||||
* -Allow pg_dump to dump a specific schema (Neil Conway)
|
* -Allow pg_dump to dump a specific schema (Neil Conway)
|
||||||
* Allow psql to do table completion for SELECT * FROM schema_part and
|
* -Allow psql to do table completion for SELECT * FROM schema_part and
|
||||||
table completion for SELECT * FROM schema_name.
|
table completion for SELECT * FROM schema_name.
|
||||||
* Add XML capability to pg_dump and COPY, when backend XML capability
|
* Add XML capability to pg_dump and COPY, when backend XML capability
|
||||||
* -Allow SSL-enabled clients to turn off SSL transfers
|
* -Allow SSL-enabled clients to turn off SSL transfers
|
||||||
@ -276,6 +287,7 @@ Clients
|
|||||||
* Allow psql \du to show groups, and add \dg for groups
|
* Allow psql \du to show groups, and add \dg for groups
|
||||||
* Allow clients to query WITH HOLD cursors and prepared statements
|
* Allow clients to query WITH HOLD cursors and prepared statements
|
||||||
* Prevent unneeded quoting in psql \d output using fmtId()
|
* Prevent unneeded quoting in psql \d output using fmtId()
|
||||||
|
* Add a libpq function to support Parse/DescribeStatement capability
|
||||||
|
|
||||||
|
|
||||||
* JDBC
|
* JDBC
|
||||||
@ -326,7 +338,8 @@ Referential Integrity
|
|||||||
* Support triggers on columns (Neil)
|
* Support triggers on columns (Neil)
|
||||||
* Have AFTER triggers execute after the appropriate SQL statement in a
|
* Have AFTER triggers execute after the appropriate SQL statement in a
|
||||||
function, not at the end of the function
|
function, not at the end of the function
|
||||||
|
* Print table names with constraint names in error messages, or make constraint
|
||||||
|
names unique within a schema
|
||||||
|
|
||||||
Dependency Checking
|
Dependency Checking
|
||||||
===================
|
===================
|
||||||
@ -381,6 +394,8 @@ Vacuum
|
|||||||
* Provide automatic running of vacuum in the background in backend
|
* Provide automatic running of vacuum in the background in backend
|
||||||
rather than in /contrib [vacuum]
|
rather than in /contrib [vacuum]
|
||||||
* Allow free space map to be auto-sized or warn when it is too small
|
* Allow free space map to be auto-sized or warn when it is too small
|
||||||
|
* Maintain a map of recently-expired of pages so vacuum can reclaim
|
||||||
|
free space without a sequential scan
|
||||||
|
|
||||||
|
|
||||||
Locking
|
Locking
|
||||||
@ -479,7 +494,7 @@ Source Code
|
|||||||
* Acquire lock on a relation before building a relcache entry for it
|
* Acquire lock on a relation before building a relcache entry for it
|
||||||
* Research interaction of setitimer() and sleep() used by statement_timeout
|
* Research interaction of setitimer() and sleep() used by statement_timeout
|
||||||
* Add checks for fclose() failure
|
* Add checks for fclose() failure
|
||||||
* Change CVS $Id: TODO,v 1.1115 2003/08/13 03:12:04 momjian Exp $ to $PostgreSQL: pgsql/doc/TODO,v 1.1115 2003/08/13 03:12:04 momjian Exp $
|
* Change CVS $Id: TODO,v 1.1115.2.1 2003/09/07 04:36:40 momjian Exp $ to $PostgreSQL: pgsql/doc/TODO,v 1.1115.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
* Exit postmaster if postgresql.conf can not be opened
|
* Exit postmaster if postgresql.conf can not be opened
|
||||||
* Rename /scripts directory because they are all C programs now
|
* Rename /scripts directory because they are all C programs now
|
||||||
* Allow the regression tests to start postmaster with -i so the tests
|
* Allow the regression tests to start postmaster with -i so the tests
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
alink="#0000ff">
|
alink="#0000ff">
|
||||||
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
|
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
|
||||||
|
|
||||||
<P>Last updated: Fri Jul 25 18:07:30 EDT 2003</P>
|
<P>Last updated: Fri Sep 5 12:42:57 EDT 2003</P>
|
||||||
|
|
||||||
<P>Current maintainer: Bruce Momjian (<A href=
|
<P>Current maintainer: Bruce Momjian (<A href=
|
||||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
||||||
@ -251,7 +251,9 @@
|
|||||||
<p>A native port to MS Win NT/2000/XP is currently being worked
|
<p>A native port to MS Win NT/2000/XP is currently being worked
|
||||||
on. For more details on the current status of PostgreSQL on Windows see
|
on. For more details on the current status of PostgreSQL on Windows see
|
||||||
<a href="http://techdocs.postgresql.org/guides/Windows">
|
<a href="http://techdocs.postgresql.org/guides/Windows">
|
||||||
http://techdocs.postgresql.org/guides/Windows</a>.</p>
|
http://techdocs.postgresql.org/guides/Windows</a> and
|
||||||
|
<a href="http://candle.pha.pa.us/main/writings/pgsql/win32.html">
|
||||||
|
http://candle.pha.pa.us/main/writings/pgsql/win32.html</a>.</p>
|
||||||
|
|
||||||
<p>There is also a Novell Netware 6 port at
|
<p>There is also a Novell Netware 6 port at
|
||||||
<a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
|
<a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
|
||||||
@ -1152,7 +1154,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
|||||||
|
|
||||||
Finally, you could use the <A href="#4.16"><SMALL>OID</SMALL></A>
|
Finally, you could use the <A href="#4.16"><SMALL>OID</SMALL></A>
|
||||||
returned from the <SMALL>INSERT</SMALL> statement to look up the
|
returned from the <SMALL>INSERT</SMALL> statement to look up the
|
||||||
default value, though this is probably the least portable approach.
|
default value, though this is probably the least portable approach,
|
||||||
|
and the oid value will wrap around when it reaches 4 billion.
|
||||||
In Perl, using DBI with Edmund Mergl's DBD::Pg module, the oid
|
In Perl, using DBI with Edmund Mergl's DBD::Pg module, the oid
|
||||||
value is made available via <I>$sth->{pg_oid_status}</I> after
|
value is made available via <I>$sth->{pg_oid_status}</I> after
|
||||||
<I>$sth->execute()</I>.
|
<I>$sth->execute()</I>.
|
||||||
|
@ -14,7 +14,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
|||||||
|
|
||||||
<p>Deutsche <20>bersetzung von Ian Barwick (<a href="mailto:barwick@gmx.net">barwick@gmx.net</a>).</p>
|
<p>Deutsche <20>bersetzung von Ian Barwick (<a href="mailto:barwick@gmx.net">barwick@gmx.net</a>).</p>
|
||||||
|
|
||||||
<p>Letzte Aktualisierung der deutschen <20>bersetzung: Di., den 22.07.2003, 16:20 CET</p>
|
<p>Letzte Aktualisierung der deutschen <20>bersetzung: Di., den 02.09.2003, 10:00 CET</p>
|
||||||
|
|
||||||
<p>Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL Website:</p>
|
<p>Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL Website:</p>
|
||||||
<ul>
|
<ul>
|
||||||
@ -1060,8 +1060,12 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
new_id = output of execute("SELECT currval('person_id_seq')");
|
new_id = output of execute("SELECT currval('person_id_seq')");
|
||||||
</pre>
|
</pre>
|
||||||
<p>Schlie<EFBFBD>lich besteht noch die M<>glichkeit, den von einer <small>INSERT</small>-Anweisung
|
<p>Schlie<EFBFBD>lich besteht noch die M<>glichkeit, den von einer <small>INSERT</small>-Anweisung
|
||||||
zur<75>ckgelieferten <small>OID</small>-Wert als einmaligen Wert zu verwenden.
|
zur<75>ckgelieferten <a href="#4.16"><small>OID</small></a>-Wert als einmaligen Wert zu verwenden.
|
||||||
In Perl mit dem <em>DBD::Pg</em>-Modul von Edmund Mergl wird der OID-Wert nach einem
|
Dieser Ansatz ist allerdings PostgreSQL-spezifisch; au<61>erdem wird nach
|
||||||
|
ca. 4 Milliarden Eintr<74>gen der <small>OID</small>-Wert wieder auf eine kleine Zahl
|
||||||
|
gesetzt, ist also nicht garantiert einmalig.</p>
|
||||||
|
|
||||||
|
<p>In Perl mit dem <em>DBD::Pg</em>-Modul wird der OID-Wert nach einem
|
||||||
<em>$sth->excute()</em> <20>ber <em>$sth->{pg_oid_status}</em> zur<75>ckgeliefert.</p>
|
<em>$sth->excute()</em> <20>ber <em>$sth->{pg_oid_status}</em> zur<75>ckgeliefert.</p>
|
||||||
|
|
||||||
<h4><a name="4.15.3">4.15.3</a>) F<>hren <em>currval()</em> und <em>nextval()</em> zu einer Race-Condition mit anderen
|
<h4><a name="4.15.3">4.15.3</a>) F<>hren <em>currval()</em> und <em>nextval()</em> zu einer Race-Condition mit anderen
|
||||||
@ -1285,13 +1289,21 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><em>contrib/pgcrypto</em> enth<74>lt diverse Funktionen f<>r die Ben<65>tzung mit
|
<li><em>contrib/pgcrypto</em> enth<74>lt diverse Funktionen f<>r die Ben<65>tzung mit
|
||||||
SQL-Abfragen;</li>
|
SQL-Abfragen.</li>
|
||||||
<li>die einzige M<>glichkeit, Kommunikationen zwischen Client und Server
|
|
||||||
zu verschl<68>sseln, ist durch die Anwendung von <em>hostssl</em> in <em>pg_hba.conf</em>;</li>
|
<li>Um Verbindungen zwischen dem Server und Client-Anwendungen zu
|
||||||
|
verschl<68>sseln, muss in der Server-Konfigurationsdatei <em>postgresql.conf</em>
|
||||||
|
die <em>ssl</em>-Option auf <em>true</em> (Voreinstellung: <em>false</em>) gesetzt werden
|
||||||
|
und ein passender <em>host</em>- bzw. <em>hostssl</em>-Eintrag muss in
|
||||||
|
<em>pg_hba.conf</em> vorhanden sein. Zudem muss die <em>sslmode</em>-Einstellung
|
||||||
|
beim Client nicht auf <em>disable</em> gesetzt werden. (Bitte beachten Sie auch,
|
||||||
|
da<64> neben der eingebauten SSL-Unterst<73>tzung verschl<68>sselte Verbindungen
|
||||||
|
auch <20>ber externe Anwendungen wie <em>stunnel</em> oder <em>ssh</em> aufgebaut werden k<>nnen).</li>
|
||||||
|
|
||||||
<li>Die Passw<73>rter der Datenbanknutzer werden ab Version 7.3 automatisch
|
<li>Die Passw<73>rter der Datenbanknutzer werden ab Version 7.3 automatisch
|
||||||
verschl<68>sselt (in fr<66>heren Versionen mu<6D> der Parameter <em>PASSWORD_ENCRYPTION</em>
|
verschl<68>sselt (in fr<66>heren Versionen mu<6D> der Parameter <em>PASSWORD_ENCRYPTION</em>
|
||||||
in <em>postgresql.conf</em> explizit eingeschaltet werden);</li>
|
in <em>postgresql.conf</em> explizit eingeschaltet werden).</li>
|
||||||
<li>der Server l<>uft auf einem verschl<68>sselten Dateisystem.</li>
|
<li>Betrieb des Servers auf einem verschl<68>sselten Dateisystem.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
@ -1333,9 +1345,15 @@ BYTEA bytea Bytearray mit variabler L
|
|||||||
<p>Die englische Vorlage dieser FAQ wird st<73>ndig <20>berarbeitet. Daher liegt
|
<p>Die englische Vorlage dieser FAQ wird st<73>ndig <20>berarbeitet. Daher liegt
|
||||||
die <20>bersetzung nicht immer auf dem aktuellsten Stand.</p>
|
die <20>bersetzung nicht immer auf dem aktuellsten Stand.</p>
|
||||||
|
|
||||||
|
<p>Die aktuellste Version der deutschen <20>bersetzung befindet sich immer unter
|
||||||
|
<a href="http://sql-info.de/postgresql/FAQ_german.html">http://sql-info.de/postgresql/FAQ_german.html</a>.
|
||||||
|
Diese "Arbeitsversion" enth<74>lt eventuell <20>nderungen, die noch nicht auf der
|
||||||
|
PostgreSQL-Website eingebunden worden sind.</p>
|
||||||
|
|
||||||
<p><EFBFBD>ber Verbesserungshinweise und Korrekturvorschl<68>ge sowie Verst<73>ndnisfragen
|
<p><EFBFBD>ber Verbesserungshinweise und Korrekturvorschl<68>ge sowie Verst<73>ndnisfragen
|
||||||
zum Inhalt der FAQ freue ich mich. Ich nehme auch allgemeine Fragen zu PostgreSQL gerne
|
zum Inhalt der FAQ freue ich mich. Ich nehme auch allgemeine Fragen zu PostgreSQL gerne
|
||||||
entgegen, kann aber leider keine zeitige Antwort garantieren.</p>
|
entgegen, verweise jedoch auf die Mailing-Listen als schnelle und zuverl<72>ssige
|
||||||
|
Anlaufstellen.</p>
|
||||||
|
|
||||||
<p>Diese <20>bersetzung basiert teilweise auf einer fr<66>heren <20>bersetzung von Karsten
|
<p>Diese <20>bersetzung basiert teilweise auf einer fr<66>heren <20>bersetzung von Karsten
|
||||||
Schulz (<a href="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</a>).</p>
|
Schulz (<a href="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</a>).</p>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# PostgreSQL documentation makefile
|
# PostgreSQL documentation makefile
|
||||||
#
|
#
|
||||||
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.57 2003/04/10 01:22:44 petere Exp $
|
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.57.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
#
|
#
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ endif
|
|||||||
|
|
||||||
# Enable draft mode during development
|
# Enable draft mode during development
|
||||||
ifneq (,$(findstring devel, $(VERSION)))
|
ifneq (,$(findstring devel, $(VERSION)))
|
||||||
JADEFLAGS += -V draft-mode
|
override JADEFLAGS += -V draft-mode
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ html: postgres.sgml $(ALLSGML) stylesheet.dsl
|
|||||||
$(JADE) $(JADEFLAGS) $(SGMLINCLUDE) $(CATALOG) -d stylesheet.dsl -i output-html -t sgml $<
|
$(JADE) $(JADEFLAGS) $(SGMLINCLUDE) $(CATALOG) -d stylesheet.dsl -i output-html -t sgml $<
|
||||||
|
|
||||||
|
|
||||||
COLLATEINDEX := $(PERL) $(COLLATEINDEX) -f -g
|
COLLATEINDEX := LC_ALL=C $(PERL) $(COLLATEINDEX) -f -g
|
||||||
|
|
||||||
ifeq (,$(wildcard HTML.index))
|
ifeq (,$(wildcard HTML.index))
|
||||||
bookindex.sgml:
|
bookindex.sgml:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/advanced.sgml,v 1.34 2003/03/25 16:15:35 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/advanced.sgml,v 1.34.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="tutorial-advanced">
|
<chapter id="tutorial-advanced">
|
||||||
@ -142,7 +142,7 @@ ERROR: <unnamed> referential integrity violation - key referenced from we
|
|||||||
<title>Transactions</title>
|
<title>Transactions</title>
|
||||||
|
|
||||||
<indexterm zone="tutorial-transactions">
|
<indexterm zone="tutorial-transactions">
|
||||||
<primary>transactions</primary>
|
<primary>transaction</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/array.sgml,v 1.29 2003/08/09 22:50:21 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/array.sgml,v 1.29.2.1 2003/09/07 04:36:40 momjian Exp $ -->
|
||||||
|
|
||||||
<sect1 id="arrays">
|
<sect1 id="arrays">
|
||||||
<title>Arrays</title>
|
<title>Arrays</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>arrays</primary>
|
<primary>array</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -162,7 +162,6 @@ ERROR: multidimensional arrays must have array expressions with matching dimens
|
|||||||
expression syntax is discussed in more detail in <xref
|
expression syntax is discussed in more detail in <xref
|
||||||
linkend="sql-syntax-array-constructors">.
|
linkend="sql-syntax-array-constructors">.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
@ -326,9 +325,9 @@ UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}'
|
|||||||
<literal>||</literal>.
|
<literal>||</literal>.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
SELECT ARRAY[1,2] || ARRAY[3,4];
|
SELECT ARRAY[1,2] || ARRAY[3,4];
|
||||||
?column?
|
?column?
|
||||||
---------------
|
-----------
|
||||||
{{1,2},{3,4}}
|
{1,2,3,4}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT ARRAY[5,6] || ARRAY[[1,2],[3,4]];
|
SELECT ARRAY[5,6] || ARRAY[[1,2],[3,4]];
|
||||||
@ -337,27 +336,68 @@ SELECT ARRAY[5,6] || ARRAY[[1,2],[3,4]];
|
|||||||
{{5,6},{1,2},{3,4}}
|
{{5,6},{1,2},{3,4}}
|
||||||
(1 row)
|
(1 row)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
The concatenation operator allows a single element to be pushed on to the
|
The concatenation operator allows a single element to be pushed on to the
|
||||||
beginning or end of a one-dimensional array. It also accepts two
|
beginning or end of a one-dimensional array. It also accepts two
|
||||||
<replaceable>N</>-dimensional arrays, or an <replaceable>N</>-dimensional
|
<replaceable>N</>-dimensional arrays, or an <replaceable>N</>-dimensional
|
||||||
and an <replaceable>N+1</>-dimensional array. In the former case, the two
|
and an <replaceable>N+1</>-dimensional array.
|
||||||
<replaceable>N</>-dimension arrays become outer elements of an
|
</para>
|
||||||
<replaceable>N+1</>-dimensional array. In the latter, the
|
|
||||||
<replaceable>N</>-dimensional array is added as either the first or last
|
|
||||||
outer element of the <replaceable>N+1</>-dimensional array.
|
|
||||||
|
|
||||||
When extending an array by concatenation, the subscripts of its existing
|
|
||||||
elements are preserved. For example, when pushing
|
|
||||||
onto the beginning of an array with one-based subscripts, the resulting
|
|
||||||
array has zero-based subscripts:
|
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When a single element is pushed on to the beginning of a one-dimensional
|
||||||
|
array, the result is an array with a lower bound subscript equal to
|
||||||
|
the righthand operand's lower bound subscript, minus one. When a single
|
||||||
|
element is pushed on to the end of a one-dimensional array, the result is
|
||||||
|
an array retaining the lower bound of the lefthand operand. For example:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
SELECT array_dims(1 || ARRAY[2,3]);
|
SELECT array_dims(1 || ARRAY[2,3]);
|
||||||
array_dims
|
array_dims
|
||||||
------------
|
------------
|
||||||
[0:2]
|
[0:2]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
SELECT array_dims(ARRAY[1,2] || 3);
|
||||||
|
array_dims
|
||||||
|
------------
|
||||||
|
[1:3]
|
||||||
|
(1 row)
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When two arrays with an equal number of dimensions are concatenated, the
|
||||||
|
result retains the lower bound subscript of the lefthand operand's outer
|
||||||
|
dimension. The result is an array comprising every element of the lefthand
|
||||||
|
operand followed by every element of the righthand operand. For example:
|
||||||
|
<programlisting>
|
||||||
|
SELECT array_dims(ARRAY[1,2] || ARRAY[3,4,5]);
|
||||||
|
array_dims
|
||||||
|
------------
|
||||||
|
[1:5]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT array_dims(ARRAY[[1,2],[3,4]] || ARRAY[[5,6],[7,8],[9,0]]);
|
||||||
|
array_dims
|
||||||
|
------------
|
||||||
|
[1:5][1:2]
|
||||||
|
(1 row)
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When an <replaceable>N</>-dimensional array is pushed on to the beginning
|
||||||
|
or end of an <replaceable>N+1</>-dimensional array, the result is
|
||||||
|
analogous to the element-array case above. Each <replaceable>N</>-dimensional
|
||||||
|
sub-array is essentially an element of the <replaceable>N+1</>-dimensional
|
||||||
|
array's outer dimension. For example:
|
||||||
|
<programlisting>
|
||||||
|
SELECT array_dims(ARRAY[1,2] || ARRAY[[3,4],[5,6]]);
|
||||||
|
array_dims
|
||||||
|
------------
|
||||||
|
[0:2][1:2]
|
||||||
|
(1 row)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -386,9 +426,9 @@ SELECT array_append(ARRAY[1,2], 3);
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT array_cat(ARRAY[1,2], ARRAY[3,4]);
|
SELECT array_cat(ARRAY[1,2], ARRAY[3,4]);
|
||||||
array_cat
|
array_cat
|
||||||
---------------
|
-----------
|
||||||
{{1,2},{3,4}}
|
{1,2,3,4}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6]);
|
SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6]);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/backup.sgml,v 2.27 2003/08/01 01:01:52 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/backup.sgml,v 2.27.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
-->
|
-->
|
||||||
<chapter id="backup">
|
<chapter id="backup">
|
||||||
<title>Backup and Restore</title>
|
<title>Backup and Restore</title>
|
||||||
@ -153,6 +153,12 @@ pg_dump -h <replaceable>host1</> <replaceable>dbname</> | psql -h <replaceable>h
|
|||||||
</para>
|
</para>
|
||||||
</important>
|
</important>
|
||||||
|
|
||||||
|
<tip>
|
||||||
|
<para>
|
||||||
|
Restore performance can be improved by increasing <literal>SORT_MEM</>
|
||||||
|
(see <xref linkend="runtime-config-resource-memory">).
|
||||||
|
</para>
|
||||||
|
</tip>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2 id="backup-dump-all">
|
<sect2 id="backup-dump-all">
|
||||||
@ -279,13 +285,15 @@ pg_dump -Fc <replaceable class="parameter">dbname</replaceable> > <replaceable c
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
For reasons of backward compatibility, <application>pg_dump</> does
|
For reasons of backward compatibility, <application>pg_dump</>
|
||||||
not dump large objects by default. To dump large objects you must use
|
does not dump large objects by default.<indexterm><primary>large
|
||||||
either the custom or the TAR output format, and use the <option>-b</> option in
|
object</primary><secondary>backup</secondary></indexterm> To dump
|
||||||
<application>pg_dump</>. See the reference pages for details.
|
large objects you must use either the custom or the TAR output
|
||||||
The directory <filename>contrib/pg_dumplo</> of the
|
format, and use the <option>-b</> option in
|
||||||
<productname>PostgreSQL</> source tree also contains a program that can
|
<application>pg_dump</>. See the reference pages for details. The
|
||||||
dump large objects.
|
directory <filename>contrib/pg_dumplo</> of the
|
||||||
|
<productname>PostgreSQL</> source tree also contains a program
|
||||||
|
that can dump large objects.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -365,7 +373,15 @@ tar -cf backup.tar /usr/local/pgsql/data
|
|||||||
|
|
||||||
<sect1 id="migration">
|
<sect1 id="migration">
|
||||||
<title>Migration between releases</title>
|
<title>Migration between releases</title>
|
||||||
<indexterm zone="migration"><primary>upgrading</></>
|
|
||||||
|
<indexterm zone="migration">
|
||||||
|
<primary>upgrading</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="migration">
|
||||||
|
<primary>version</primary>
|
||||||
|
<secondary>compatibility</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
As a general rule, the internal data storage format is subject to
|
As a general rule, the internal data storage format is subject to
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/charset.sgml,v 2.37 2003/08/04 04:03:03 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/charset.sgml,v 2.37.2.1 2003/09/07 04:36:40 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="charset">
|
<chapter id="charset">
|
||||||
<title>Localization</>
|
<title>Localization</>
|
||||||
@ -197,7 +197,7 @@ initdb --locale=sv_SE
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Sort order in queries using <command>ORDER BY</>
|
Sort order in queries using <command>ORDER BY</>
|
||||||
<indexterm><primary>ORDER BY</></>
|
<indexterm><primary>ORDER BY</><secondary>and locales</></indexterm>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.53 2003/07/26 13:50:01 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.53.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="client-authentication">
|
<chapter id="client-authentication">
|
||||||
@ -199,13 +199,17 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
(<replaceable>actual-IP-address</replaceable> xor <replaceable>IP-address-field</replaceable>) and <replaceable>IP-mask-field</replaceable>
|
(<replaceable>actual-IP-address</replaceable> xor <replaceable>IP-address-field</replaceable>) and <replaceable>IP-mask-field</replaceable>
|
||||||
</programlisting>
|
</programlisting>
|
||||||
must be zero for the record to match. (Of course IP addresses
|
must be zero for the record to match.
|
||||||
can be spoofed but this consideration is beyond the scope of
|
</para>
|
||||||
<productname>PostgreSQL</productname>.) If you machine supports
|
|
||||||
IPv6, the default <filename>pg_hba.conf</> file will have an
|
<para>
|
||||||
IPv6 entry for <literal>localhost</>. You can add your own IPv6
|
An IP address given in IPv4 format will match IPv6 connections that
|
||||||
entries to the file. IPv6 entries are used only for IPv6
|
have the corresponding address, for example <literal>127.0.0.1</>
|
||||||
connections.
|
will match the IPv6 address <literal>::ffff:127.0.0.1</>. An entry
|
||||||
|
given in IPv6 format will match only IPv6 connections, even if the
|
||||||
|
represented address is in the IPv4-in-IPv6 range. Note that entries
|
||||||
|
in IPv6 format will be rejected if the system's C library does not have
|
||||||
|
support for IPv6 addresses.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -219,9 +223,10 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
|
|||||||
<term><replaceable>CIDR-mask</replaceable></term>
|
<term><replaceable>CIDR-mask</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
This is an integer specifying the number of significant bits
|
This field may be used as an alternative to the
|
||||||
to set in the mask, and is an alternative to using the
|
<replaceable>IP-mask</replaceable> notation. It is an
|
||||||
<replaceable>IP-mask</replaceable> notation. The number must
|
integer specifying the number of high-order bits
|
||||||
|
to set in the mask. The number must
|
||||||
be between 0 and 32 (in the case of an IPv4 address) or 128
|
be between 0 and 32 (in the case of an IPv4 address) or 128
|
||||||
(in the case of an IPv6 address) inclusive. 0 will match any
|
(in the case of an IPv6 address) inclusive. 0 will match any
|
||||||
address, while 32/128 will match only the exact host specified.
|
address, while 32/128 will match only the exact host specified.
|
||||||
@ -451,6 +456,11 @@ local all all trust
|
|||||||
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
|
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
|
||||||
host all all 127.0.0.1 255.255.255.255 trust
|
host all all 127.0.0.1 255.255.255.255 trust
|
||||||
|
|
||||||
|
# The same as the last line but using a CIDR mask
|
||||||
|
#
|
||||||
|
# TYPE DATABASE USER IP-ADDRESS/CIDR-mask METHOD
|
||||||
|
host all all 127.0.0.1/32 trust
|
||||||
|
|
||||||
# Allow any user from any host with IP address 192.168.93.x to connect
|
# Allow any user from any host with IP address 192.168.93.x to connect
|
||||||
# to database "template1" as the same user name that ident reports for
|
# to database "template1" as the same user name that ident reports for
|
||||||
# the connection (typically the Unix user name).
|
# the connection (typically the Unix user name).
|
||||||
@ -458,6 +468,11 @@ host all all 127.0.0.1 255.255.255.255 trust
|
|||||||
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
|
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
|
||||||
host template1 all 192.168.93.0 255.255.255.0 ident sameuser
|
host template1 all 192.168.93.0 255.255.255.0 ident sameuser
|
||||||
|
|
||||||
|
# The same as the last line but using a CIDR mask
|
||||||
|
#
|
||||||
|
# TYPE DATABASE USER IP-ADDRESS/CIDR-mask METHOD
|
||||||
|
host template1 all 192.168.93.0/24 ident sameuser
|
||||||
|
|
||||||
# Allow a user from host 192.168.12.10 to connect to database
|
# Allow a user from host 192.168.12.10 to connect to database
|
||||||
# "template1" if the user's password is correctly supplied.
|
# "template1" if the user's password is correctly supplied.
|
||||||
#
|
#
|
||||||
@ -566,6 +581,7 @@ local db1,db2,@demodbs all md5
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>password</primary>
|
<primary>password</primary>
|
||||||
|
<secondary>authentication</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -610,16 +626,21 @@ local db1,db2,@demodbs all md5
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<productname>Kerberos</productname> is an industry-standard secure
|
<productname>Kerberos</productname> is an industry-standard secure
|
||||||
authentication system suitable for distributed computing over a
|
authentication system suitable for distributed computing over a public
|
||||||
public network. A description of the
|
network. A description of the <productname>Kerberos</productname> system
|
||||||
<productname>Kerberos</productname> system is far beyond the scope
|
is far beyond the scope of this document; in all generality it can be
|
||||||
of this document; in all generality it can be quite complex (yet
|
quite complex (yet powerful). The <ulink
|
||||||
powerful). The <ulink
|
|
||||||
url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerberos
|
url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerberos
|
||||||
<acronym>FAQ</></ulink> or <ulink
|
<acronym>FAQ</></ulink> or <ulink url="ftp://athena-dist.mit.edu">MIT
|
||||||
url="ftp://athena-dist.mit.edu">MIT Project Athena</ulink> can be
|
Project Athena</ulink> can be a good starting point for exploration.
|
||||||
a good starting point for exploration. Several sources for
|
Several sources for <productname>Kerberos</> distributions exist.
|
||||||
<productname>Kerberos</> distributions exist.
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
While <productname>PostgreSQL</> supports both Kerberos 4 and
|
||||||
|
Kerberos 5, only Kerberos 5 is recommended. Kerberos 4 is
|
||||||
|
considered insecure and no longer recommended for general
|
||||||
|
use.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -850,6 +871,10 @@ omicron bryanh guest1
|
|||||||
<sect2 id="auth-pam">
|
<sect2 id="auth-pam">
|
||||||
<title>PAM Authentication</title>
|
<title>PAM Authentication</title>
|
||||||
|
|
||||||
|
<indexterm zone="auth-pam">
|
||||||
|
<primary>PAM</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
This authentication method operates similarly to
|
This authentication method operates similarly to
|
||||||
<literal>password</literal> except that it uses PAM (Pluggable
|
<literal>password</literal> except that it uses PAM (Pluggable
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.122 2003/08/09 22:50:21 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.122.2.1 2003/09/07 04:36:40 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="datatype">
|
<chapter id="datatype">
|
||||||
<title id="datatype-title">Data Types</title>
|
<title id="datatype-title">Data Types</title>
|
||||||
|
|
||||||
<indexterm zone="datatype">
|
<indexterm zone="datatype">
|
||||||
<primary>data types</primary>
|
<primary>data type</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>types</primary>
|
<primary>type</primary>
|
||||||
<see>data types</see>
|
<see>data type</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -279,68 +279,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.122 2003/08/09 22:50:21 t
|
|||||||
<title>Numeric Types</title>
|
<title>Numeric Types</title>
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
<indexterm zone="datatype-numeric">
|
||||||
<primary>data types</primary>
|
<primary>data type</primary>
|
||||||
<secondary>numeric</secondary>
|
<secondary>numeric</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>integer</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>smallint</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>bigint</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>int4</primary>
|
|
||||||
<see>integer</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>int2</primary>
|
|
||||||
<see>smallint</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>int8</primary>
|
|
||||||
<see>bigint</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>numeric (data type)</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>decimal</primary>
|
|
||||||
<see>numeric</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>real</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>double precision</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>float4</primary>
|
|
||||||
<see>real</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>float8</primary>
|
|
||||||
<see>double precision</see>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm zone="datatype-numeric">
|
|
||||||
<primary>floating point</primary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Numeric types consist of two-, four-, and eight-byte integers,
|
Numeric types consist of two-, four-, and eight-byte integers,
|
||||||
four- and eight-byte floating-point numbers, and fixed-precision
|
four- and eight-byte floating-point numbers, and fixed-precision
|
||||||
@ -434,6 +376,33 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.122 2003/08/09 22:50:21 t
|
|||||||
<sect2 id="datatype-int">
|
<sect2 id="datatype-int">
|
||||||
<title>Integer Types</title>
|
<title>Integer Types</title>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-int">
|
||||||
|
<primary>integer</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-int">
|
||||||
|
<primary>smallint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-int">
|
||||||
|
<primary>bigint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>int4</primary>
|
||||||
|
<see>integer</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>int2</primary>
|
||||||
|
<see>smallint</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>int8</primary>
|
||||||
|
<see>bigint</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The types <type>smallint</type>, <type>integer</type>, and
|
The types <type>smallint</type>, <type>integer</type>, and
|
||||||
<type>bigint</type> store whole numbers, that is, numbers without
|
<type>bigint</type> store whole numbers, that is, numbers without
|
||||||
@ -495,6 +464,15 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.122 2003/08/09 22:50:21 t
|
|||||||
<sect2 id="datatype-numeric-decimal">
|
<sect2 id="datatype-numeric-decimal">
|
||||||
<title>Arbitrary Precision Numbers</title>
|
<title>Arbitrary Precision Numbers</title>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-numeric-decimal">
|
||||||
|
<primary>numeric (data type)</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>decimal</primary>
|
||||||
|
<see>numeric</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The type <type>numeric</type> can store numbers with up to 1000
|
The type <type>numeric</type> can store numbers with up to 1000
|
||||||
digits of precision and perform calculations exactly. It is
|
digits of precision and perform calculations exactly. It is
|
||||||
@ -562,6 +540,28 @@ NUMERIC
|
|||||||
<sect2 id="datatype-float">
|
<sect2 id="datatype-float">
|
||||||
<title>Floating-Point Types</title>
|
<title>Floating-Point Types</title>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-float">
|
||||||
|
<primary>real</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-float">
|
||||||
|
<primary>double precision</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>float4</primary>
|
||||||
|
<see>real</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>float8</primary>
|
||||||
|
<see>double precision</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-float">
|
||||||
|
<primary>floating point</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The data types <type>real</type> and <type>double
|
The data types <type>real</type> and <type>double
|
||||||
precision</type> are inexact, variable-precision numeric types.
|
precision</type> are inexact, variable-precision numeric types.
|
||||||
@ -675,7 +675,7 @@ NUMERIC
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>sequences</primary>
|
<primary>sequence</primary>
|
||||||
<secondary>and serial type</secondary>
|
<secondary>and serial type</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -807,18 +807,33 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (
|
|||||||
<title>Character Types</title>
|
<title>Character Types</title>
|
||||||
|
|
||||||
<indexterm zone="datatype-character">
|
<indexterm zone="datatype-character">
|
||||||
<primary>character strings</primary>
|
<primary>character string</primary>
|
||||||
<secondary>data types</secondary>
|
<secondary>data types</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>strings</primary>
|
<primary>string</primary>
|
||||||
<see>character strings</see>
|
<see>character string</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm zone="datatype-character">
|
||||||
|
<primary>character</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-character">
|
||||||
|
<primary>character varying</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-character">
|
||||||
<primary>text</primary>
|
<primary>text</primary>
|
||||||
<see>character strings</see>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-character">
|
||||||
|
<primary>char</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-character">
|
||||||
|
<primary>varchar</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<table id="datatype-character-table">
|
<table id="datatype-character-table">
|
||||||
@ -1020,6 +1035,15 @@ SELECT b, char_length(b) FROM test2;
|
|||||||
|
|
||||||
<sect1 id="datatype-binary">
|
<sect1 id="datatype-binary">
|
||||||
<title>Binary Data Types</title>
|
<title>Binary Data Types</title>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-binary">
|
||||||
|
<primary>binary data</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-binary">
|
||||||
|
<primary>bytea</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <type>bytea</type> data type allows storage of binary strings;
|
The <type>bytea</type> data type allows storage of binary strings;
|
||||||
see <xref linkend="datatype-binary-table">.
|
see <xref linkend="datatype-binary-table">.
|
||||||
@ -1210,6 +1234,34 @@ SELECT b, char_length(b) FROM test2;
|
|||||||
<sect1 id="datatype-datetime">
|
<sect1 id="datatype-datetime">
|
||||||
<title>Date/Time Types</title>
|
<title>Date/Time Types</title>
|
||||||
|
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>date</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>time</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>time without time zone</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>time with time zone</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>timestamp</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>timestamp with time zone</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>timestamp without time zone</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>interval</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="datatype-datetime">
|
||||||
|
<primary>time span</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<productname>PostgreSQL</productname> supports the full set of
|
<productname>PostgreSQL</productname> supports the full set of
|
||||||
<acronym>SQL</acronym> date and time types, shown in <xref
|
<acronym>SQL</acronym> date and time types, shown in <xref
|
||||||
@ -1387,7 +1439,6 @@ SELECT b, char_length(b) FROM test2;
|
|||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>date</primary>
|
<primary>date</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1461,15 +1512,12 @@ SELECT b, char_length(b) FROM test2;
|
|||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time</primary>
|
<primary>time</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time without time zone</primary>
|
<primary>time without time zone</primary>
|
||||||
<secondary>time</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time with time zone</primary>
|
<primary>time with time zone</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1587,17 +1635,14 @@ SELECT b, char_length(b) FROM test2;
|
|||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>timestamp</primary>
|
<primary>timestamp</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>timestamp with time zone</primary>
|
<primary>timestamp with time zone</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>timestamp without time zone</primary>
|
<primary>timestamp without time zone</primary>
|
||||||
<secondary>data type</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1797,13 +1842,13 @@ January 8 04:05:06 1999 PST
|
|||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>date</primary>
|
<primary>date</primary>
|
||||||
<secondary>output format</secondary>
|
<secondary>output format</secondary>
|
||||||
<seealso>Formatting</seealso>
|
<seealso>formatting</seealso>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time</primary>
|
<primary>time</primary>
|
||||||
<secondary>output format</secondary>
|
<secondary>output format</secondary>
|
||||||
<seealso>Formatting</seealso>
|
<seealso>formatting</seealso>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1924,7 +1969,7 @@ January 8 04:05:06 1999 PST
|
|||||||
<title>Time Zones</title>
|
<title>Time Zones</title>
|
||||||
|
|
||||||
<indexterm zone="datatype-timezones">
|
<indexterm zone="datatype-timezones">
|
||||||
<primary>time zones</primary>
|
<primary>time zone</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -2265,7 +2310,11 @@ SELECT * FROM test1 WHERE a;
|
|||||||
<title>Line Segments</title>
|
<title>Line Segments</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>line</primary>
|
<primary>lseg</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>line segment</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -2293,6 +2342,10 @@ SELECT * FROM test1 WHERE a;
|
|||||||
<primary>box (data type)</primary>
|
<primary>box (data type)</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>rectangle</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Boxes are represented by pairs of points that are opposite
|
Boxes are represented by pairs of points that are opposite
|
||||||
corners of the box.
|
corners of the box.
|
||||||
@ -2431,7 +2484,7 @@ SELECT * FROM test1 WHERE a;
|
|||||||
|
|
||||||
<indexterm zone="datatype-net-types">
|
<indexterm zone="datatype-net-types">
|
||||||
<primary>network</primary>
|
<primary>network</primary>
|
||||||
<secondary>addresses</secondary>
|
<secondary>data types</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -2708,7 +2761,7 @@ SELECT * FROM test1 WHERE a;
|
|||||||
<title>Bit String Types</title>
|
<title>Bit String Types</title>
|
||||||
|
|
||||||
<indexterm zone="datatype-bit">
|
<indexterm zone="datatype-bit">
|
||||||
<primary>bit strings</primary>
|
<primary>bit string</primary>
|
||||||
<secondary>data type</secondary>
|
<secondary>data type</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -3045,11 +3098,6 @@ SELECT * FROM test;
|
|||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<row>
|
|
||||||
<entry><type>record</></entry>
|
|
||||||
<entry>Identifies a function returning an unspecified row type.</entry>
|
|
||||||
</row>
|
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><type>any</></entry>
|
<entry><type>any</></entry>
|
||||||
<entry>Indicates that a function accepts any input data type whatever.</entry>
|
<entry>Indicates that a function accepts any input data type whatever.</entry>
|
||||||
@ -3058,28 +3106,13 @@ SELECT * FROM test;
|
|||||||
<row>
|
<row>
|
||||||
<entry><type>anyarray</></entry>
|
<entry><type>anyarray</></entry>
|
||||||
<entry>Indicates that a function accepts any array data type
|
<entry>Indicates that a function accepts any array data type
|
||||||
(see <xref linkend="types-polymorphic">).</entry>
|
(see <xref linkend="extend-types-polymorphic">).</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><type>anyelement</></entry>
|
<entry><type>anyelement</></entry>
|
||||||
<entry>Indicates that a function accepts any data type
|
<entry>Indicates that a function accepts any data type
|
||||||
(see <xref linkend="types-polymorphic">).</entry>
|
(see <xref linkend="extend-types-polymorphic">).</entry>
|
||||||
</row>
|
|
||||||
|
|
||||||
<row>
|
|
||||||
<entry><type>void</></entry>
|
|
||||||
<entry>Indicates that a function returns no value.</entry>
|
|
||||||
</row>
|
|
||||||
|
|
||||||
<row>
|
|
||||||
<entry><type>trigger</></entry>
|
|
||||||
<entry>A trigger function is declared to return <type>trigger.</></entry>
|
|
||||||
</row>
|
|
||||||
|
|
||||||
<row>
|
|
||||||
<entry><type>language_handler</></entry>
|
|
||||||
<entry>A procedural language call handler is declared to return <type>language_handler</>.</entry>
|
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
@ -3093,6 +3126,26 @@ SELECT * FROM test;
|
|||||||
data type.</entry>
|
data type.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><type>language_handler</></entry>
|
||||||
|
<entry>A procedural language call handler is declared to return <type>language_handler</>.</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><type>record</></entry>
|
||||||
|
<entry>Identifies a function returning an unspecified row type.</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><type>trigger</></entry>
|
||||||
|
<entry>A trigger function is declared to return <type>trigger.</></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><type>void</></entry>
|
||||||
|
<entry>Indicates that a function returns no value.</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><type>opaque</></entry>
|
<entry><type>opaque</></entry>
|
||||||
<entry>An obsolete type name that formerly served all the above purposes.</entry>
|
<entry>An obsolete type name that formerly served all the above purposes.</entry>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32.2.1 2003/09/07 04:36:41 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<appendix id="datetime-appendix">
|
<appendix id="datetime-appendix">
|
||||||
@ -364,7 +364,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time zones</primary>
|
<primary>time zone</primary>
|
||||||
|
<secondary>abbreviations</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -536,18 +537,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
<entry>+07:00</entry>
|
<entry>+07:00</entry>
|
||||||
<entry>Christmas (Island) Time</entry>
|
<entry>Christmas (Island) Time</entry>
|
||||||
</row>
|
</row>
|
||||||
<!--
|
|
||||||
Conflicts with China Coastal Time
|
|
||||||
<row>
|
|
||||||
<entry>CCT</entry>
|
|
||||||
<entry>+06:30</entry>
|
|
||||||
<entry>Cocos Island Time</entry>
|
|
||||||
</row>
|
|
||||||
-->
|
|
||||||
<row>
|
<row>
|
||||||
<entry>MMT</entry>
|
<entry>MMT</entry>
|
||||||
<entry>+06:30</entry>
|
<entry>+06:30</entry>
|
||||||
<entry>Myannar Time</entry>
|
<entry>Myanmar Time</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>ALMT</entry>
|
<entry>ALMT</entry>
|
||||||
@ -759,6 +752,21 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
<entry>-01:00</entry>
|
<entry>-01:00</entry>
|
||||||
<entry>West Africa Time</entry>
|
<entry>West Africa Time</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>FNST</entry>
|
||||||
|
<entry>-01:00</entry>
|
||||||
|
<entry>Fernando de Noronha Summer Time</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>FNT</entry>
|
||||||
|
<entry>-02:00</entry>
|
||||||
|
<entry>Fernando de Noronha Time</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>BRST</entry>
|
||||||
|
<entry>-02:00</entry>
|
||||||
|
<entry>Brasilia Summer Time</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>NDT</entry>
|
<entry>NDT</entry>
|
||||||
<entry>-02:30</entry>
|
<entry>-02:30</entry>
|
||||||
@ -774,6 +782,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
<entry>-03:00</entry>
|
<entry>-03:00</entry>
|
||||||
<entry>(unknown)</entry>
|
<entry>(unknown)</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>BRT</entry>
|
||||||
|
<entry>-03:00</entry>
|
||||||
|
<entry>Brasilia Time</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>NFT</entry>
|
<entry>NFT</entry>
|
||||||
<entry>-03:30</entry>
|
<entry>-03:30</entry>
|
||||||
@ -794,11 +807,6 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
<entry>-04:00</entry>
|
<entry>-04:00</entry>
|
||||||
<entry>Atlantic/Porto Acre Summer Time</entry>
|
<entry>Atlantic/Porto Acre Summer Time</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
|
||||||
<entry>ACT</entry>
|
|
||||||
<entry>-05:00</entry>
|
|
||||||
<entry>Atlantic/Porto Acre Standard Time</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
<row>
|
||||||
<entry>EDT</entry>
|
<entry>EDT</entry>
|
||||||
<entry>-04:00</entry>
|
<entry>-04:00</entry>
|
||||||
@ -811,6 +819,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.32 2003/07/29 00:03:17 tg
|
|||||||
<entry>GMT +4 hours</entry>
|
<entry>GMT +4 hours</entry>
|
||||||
</row>
|
</row>
|
||||||
-->
|
-->
|
||||||
|
<row>
|
||||||
|
<entry>ACT</entry>
|
||||||
|
<entry>-05:00</entry>
|
||||||
|
<entry>Atlantic/Porto Acre Standard Time</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>CDT</entry>
|
<entry>CDT</entry>
|
||||||
<entry>-05:00</entry>
|
<entry>-05:00</entry>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ddl.sgml,v 1.17 2003/08/14 23:13:27 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ddl.sgml,v 1.17.2.1 2003/09/07 04:36:41 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="ddl">
|
<chapter id="ddl">
|
||||||
<title>Data Definition</title>
|
<title>Data Definition</title>
|
||||||
@ -19,6 +19,18 @@
|
|||||||
<sect1 id="ddl-basics">
|
<sect1 id="ddl-basics">
|
||||||
<title>Table Basics</title>
|
<title>Table Basics</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-basics">
|
||||||
|
<primary>table</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>row</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>column</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A table in a relational database is much like a table on paper: It
|
A table in a relational database is much like a table on paper: It
|
||||||
consists of rows and columns. The number and order of the columns
|
consists of rows and columns. The number and order of the columns
|
||||||
@ -60,6 +72,11 @@
|
|||||||
containing both date and time.
|
containing both date and time.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>table</primary>
|
||||||
|
<secondary>creating</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To create a table, you use the aptly named <literal>CREATE
|
To create a table, you use the aptly named <literal>CREATE
|
||||||
TABLE</literal> command. In this command you specify at least a
|
TABLE</literal> command. In this command you specify at least a
|
||||||
@ -114,6 +131,11 @@ CREATE TABLE products (
|
|||||||
highly unusual and often a questionable design.
|
highly unusual and often a questionable design.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>table</primary>
|
||||||
|
<secondary>removing</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If you no longer need a table, you can remove it using the
|
If you no longer need a table, you can remove it using the
|
||||||
<command>DROP TABLE</command> command. For example:
|
<command>DROP TABLE</command> command. For example:
|
||||||
@ -156,8 +178,8 @@ DROP TABLE products;
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>columns</primary>
|
<primary>column</primary>
|
||||||
<secondary>system columns</secondary>
|
<secondary>system column</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
@ -167,6 +189,7 @@ DROP TABLE products;
|
|||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>OID</primary>
|
<primary>OID</primary>
|
||||||
|
<secondary>column</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
The object identifier (object ID) of a row. This is a serial
|
The object identifier (object ID) of a row. This is a serial
|
||||||
number that is automatically added by
|
number that is automatically added by
|
||||||
@ -182,6 +205,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>tableoid</></term>
|
<term><structfield>tableoid</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>tableoid</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The OID of the table containing this row. This column is
|
The OID of the table containing this row. This column is
|
||||||
particularly handy for queries that select from inheritance
|
particularly handy for queries that select from inheritance
|
||||||
@ -197,6 +224,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>xmin</></term>
|
<term><structfield>xmin</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>xmin</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The identity (transaction ID) of the inserting transaction for
|
The identity (transaction ID) of the inserting transaction for
|
||||||
this tuple. (Note: In this context, a tuple is an individual
|
this tuple. (Note: In this context, a tuple is an individual
|
||||||
@ -209,6 +240,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>cmin</></term>
|
<term><structfield>cmin</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>cmin</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The command identifier (starting at zero) within the inserting
|
The command identifier (starting at zero) within the inserting
|
||||||
transaction.
|
transaction.
|
||||||
@ -219,6 +254,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>xmax</></term>
|
<term><structfield>xmax</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>xmax</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The identity (transaction ID) of the deleting transaction, or
|
The identity (transaction ID) of the deleting transaction, or
|
||||||
zero for an undeleted tuple. It is possible for this column to
|
zero for an undeleted tuple. It is possible for this column to
|
||||||
@ -232,6 +271,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>cmax</></term>
|
<term><structfield>cmax</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>cmax</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The command identifier within the deleting transaction, or zero.
|
The command identifier within the deleting transaction, or zero.
|
||||||
</para>
|
</para>
|
||||||
@ -241,6 +284,10 @@ DROP TABLE products;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><structfield>ctid</></term>
|
<term><structfield>ctid</></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
<indexterm>
|
||||||
|
<primary>ctid</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The physical location of the tuple within its table. Note that
|
The physical location of the tuple within its table. Note that
|
||||||
although the <structfield>ctid</structfield> can be used to
|
although the <structfield>ctid</structfield> can be used to
|
||||||
@ -292,6 +339,10 @@ DROP TABLE products;
|
|||||||
<sect1 id="ddl-default">
|
<sect1 id="ddl-default">
|
||||||
<title>Default Values</title>
|
<title>Default Values</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-default">
|
||||||
|
<primary>default value</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A column can be assigned a default value. When a new row is
|
A column can be assigned a default value. When a new row is
|
||||||
created and no values are specified for some of the columns, the
|
created and no values are specified for some of the columns, the
|
||||||
@ -302,6 +353,7 @@ DROP TABLE products;
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
<indexterm><primary>null value</primary><secondary>default value</secondary></indexterm>
|
||||||
If no default value is declared explicitly, the null value is the
|
If no default value is declared explicitly, the null value is the
|
||||||
default value. This usually makes sense because a null value can
|
default value. This usually makes sense because a null value can
|
||||||
be thought to represent unknown data.
|
be thought to represent unknown data.
|
||||||
@ -329,6 +381,10 @@ CREATE TABLE products (
|
|||||||
<sect1 id="ddl-constraints">
|
<sect1 id="ddl-constraints">
|
||||||
<title>Constraints</title>
|
<title>Constraints</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-constraints">
|
||||||
|
<primary>constraint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Data types are a way to limit the kind of data that can be stored
|
Data types are a way to limit the kind of data that can be stored
|
||||||
in a table. For many applications, however, the constraint they
|
in a table. For many applications, however, the constraint they
|
||||||
@ -351,6 +407,15 @@ CREATE TABLE products (
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Check Constraints</title>
|
<title>Check Constraints</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>check constraint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>check</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A check constraint is the most generic constraint type. It allows
|
A check constraint is the most generic constraint type. It allows
|
||||||
you to specify that the value in a certain column must satisfy an
|
you to specify that the value in a certain column must satisfy an
|
||||||
@ -375,6 +440,11 @@ CREATE TABLE products (
|
|||||||
would not make too much sense.
|
would not make too much sense.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>name</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
You can also give the constraint a separate name. This clarifies
|
You can also give the constraint a separate name. This clarifies
|
||||||
error messages and allows you to refer to the constraint when you
|
error messages and allows you to refer to the constraint when you
|
||||||
@ -444,6 +514,11 @@ CREATE TABLE products (
|
|||||||
It's a matter of taste.
|
It's a matter of taste.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>null value</primary>
|
||||||
|
<secondary sortas="check constraints">with check constraints</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
It should be noted that a check constraint is satisfied if the
|
It should be noted that a check constraint is satisfied if the
|
||||||
check expression evaluates to true or the null value. Since most
|
check expression evaluates to true or the null value. Since most
|
||||||
@ -457,6 +532,15 @@ CREATE TABLE products (
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Not-Null Constraints</title>
|
<title>Not-Null Constraints</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>not-null constraint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>NOT NULL</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A not-null constraint simply specifies that a column must not
|
A not-null constraint simply specifies that a column must not
|
||||||
assume the null value. A syntax example:
|
assume the null value. A syntax example:
|
||||||
@ -526,6 +610,15 @@ CREATE TABLE products (
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Unique Constraints</title>
|
<title>Unique Constraints</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>unique constraint</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>unique</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Unique constraints ensure that the data contained in a column or a
|
Unique constraints ensure that the data contained in a column or a
|
||||||
group of columns is unique with respect to all the rows in the
|
group of columns is unique with respect to all the rows in the
|
||||||
@ -573,6 +666,11 @@ CREATE TABLE products (
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>null value</primary>
|
||||||
|
<secondary sortas="unique constraints">with unique constraints</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In general, a unique constraint is violated when there are (at
|
In general, a unique constraint is violated when there are (at
|
||||||
least) two rows in the table where the values of each of the
|
least) two rows in the table where the values of each of the
|
||||||
@ -591,6 +689,15 @@ CREATE TABLE products (
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Primary Keys</title>
|
<title>Primary Keys</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>primary key</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>primary key</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Technically, a primary key constraint is simply a combination of a
|
Technically, a primary key constraint is simply a combination of a
|
||||||
unique constraint and a not-null constraint. So, the following
|
unique constraint and a not-null constraint. So, the following
|
||||||
@ -649,6 +756,19 @@ CREATE TABLE example (
|
|||||||
<sect2 id="ddl-constraints-fk">
|
<sect2 id="ddl-constraints-fk">
|
||||||
<title>Foreign Keys</title>
|
<title>Foreign Keys</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>foreign key</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>foreign key</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>referential integrity</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A foreign key constraint specifies that the values in a column (or
|
A foreign key constraint specifies that the values in a column (or
|
||||||
a group of columns) must match the values appearing in some row
|
a group of columns) must match the values appearing in some row
|
||||||
@ -749,6 +869,16 @@ CREATE TABLE order_items (
|
|||||||
the last table.
|
the last table.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>CASCADE</primary>
|
||||||
|
<secondary>foreign key action</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>RESTRICT</primary>
|
||||||
|
<secondary>foreign key action</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
We know that the foreign keys disallow creation of orders that
|
We know that the foreign keys disallow creation of orders that
|
||||||
do not relate to any products. But what if a product is removed
|
do not relate to any products. But what if a product is removed
|
||||||
@ -998,6 +1128,11 @@ SET SQL_Inheritance TO OFF;
|
|||||||
<sect1 id="ddl-alter">
|
<sect1 id="ddl-alter">
|
||||||
<title>Modifying Tables</title>
|
<title>Modifying Tables</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-alter">
|
||||||
|
<primary>table</primary>
|
||||||
|
<secondary>modifying</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When you create a table and you realize that you made a mistake, or
|
When you create a table and you realize that you made a mistake, or
|
||||||
the requirements of the application changed, then you can drop the
|
the requirements of the application changed, then you can drop the
|
||||||
@ -1042,6 +1177,11 @@ SET SQL_Inheritance TO OFF;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Adding a Column</title>
|
<title>Adding a Column</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>column</primary>
|
||||||
|
<secondary>adding</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To add a column, use this command:
|
To add a column, use this command:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1070,6 +1210,11 @@ ALTER TABLE products ADD COLUMN description text CHECK (description <> '')
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Removing a Column</title>
|
<title>Removing a Column</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>column</primary>
|
||||||
|
<secondary>removing</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To remove a column, use this command:
|
To remove a column, use this command:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1081,6 +1226,11 @@ ALTER TABLE products DROP COLUMN description;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Adding a Constraint</title>
|
<title>Adding a Constraint</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>adding</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To add a constraint, the table constraint syntax is used. For example:
|
To add a constraint, the table constraint syntax is used. For example:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1104,6 +1254,11 @@ ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Removing a Constraint</title>
|
<title>Removing a Constraint</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>constraint</primary>
|
||||||
|
<secondary>removing</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To remove a constraint you need to know its name. If you gave it
|
To remove a constraint you need to know its name. If you gave it
|
||||||
a name then that's easy. Otherwise the system assigned a
|
a name then that's easy. Otherwise the system assigned a
|
||||||
@ -1127,6 +1282,11 @@ ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Changing the Default</title>
|
<title>Changing the Default</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>default value</primary>
|
||||||
|
<secondary>changing</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To set a new default for a column, use a command like this:
|
To set a new default for a column, use a command like this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1146,6 +1306,11 @@ ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Renaming a Column</title>
|
<title>Renaming a Column</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>column</primary>
|
||||||
|
<secondary>renaming</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To rename a column:
|
To rename a column:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1157,6 +1322,11 @@ ALTER TABLE products RENAME COLUMN product_no TO product_number;
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Renaming a Table</title>
|
<title>Renaming a Table</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>table</primary>
|
||||||
|
<secondary>renaming</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To rename a table:
|
To rename a table:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1169,6 +1339,15 @@ ALTER TABLE products RENAME TO items;
|
|||||||
<sect1 id="ddl-priv">
|
<sect1 id="ddl-priv">
|
||||||
<title>Privileges</title>
|
<title>Privileges</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-priv">
|
||||||
|
<primary>privilege</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>permission</primary>
|
||||||
|
<see>privilege</see>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When you create a database object, you become its owner. By
|
When you create a database object, you become its owner. By
|
||||||
default, only the owner of an object can do anything with the
|
default, only the owner of an object can do anything with the
|
||||||
@ -1241,12 +1420,8 @@ REVOKE ALL ON accounts FROM PUBLIC;
|
|||||||
<sect1 id="ddl-schemas">
|
<sect1 id="ddl-schemas">
|
||||||
<title>Schemas</title>
|
<title>Schemas</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm zone="ddl-schemas">
|
||||||
<primary>schemas</primary>
|
<primary>schema</primary>
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<indexterm>
|
|
||||||
<primary>namespaces</primary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1313,6 +1488,11 @@ REVOKE ALL ON accounts FROM PUBLIC;
|
|||||||
<sect2 id="ddl-schemas-create">
|
<sect2 id="ddl-schemas-create">
|
||||||
<title>Creating a Schema</title>
|
<title>Creating a Schema</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-schemas-create">
|
||||||
|
<primary>schema</primary>
|
||||||
|
<secondary>creating</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To create a separate schema, use the command <literal>CREATE
|
To create a separate schema, use the command <literal>CREATE
|
||||||
SCHEMA</literal>. Give the schema a name of your choice. For
|
SCHEMA</literal>. Give the schema a name of your choice. For
|
||||||
@ -1323,11 +1503,11 @@ CREATE SCHEMA myschema;
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>qualified names</primary>
|
<primary>qualified name</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>names</primary>
|
<primary>name</primary>
|
||||||
<secondary>qualified</secondary>
|
<secondary>qualified</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -1359,6 +1539,11 @@ CREATE TABLE myschema.mytable (
|
|||||||
the following chapters.
|
the following chapters.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>schema</primary>
|
||||||
|
<secondary>removing</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To drop a schema if it's empty (all objects in it have been
|
To drop a schema if it's empty (all objects in it have been
|
||||||
dropped), use
|
dropped), use
|
||||||
@ -1394,6 +1579,11 @@ CREATE SCHEMA <replaceable>schemaname</replaceable> AUTHORIZATION <replaceable>u
|
|||||||
<sect2 id="ddl-schemas-public">
|
<sect2 id="ddl-schemas-public">
|
||||||
<title>The Public Schema</title>
|
<title>The Public Schema</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-schemas-public">
|
||||||
|
<primary>schema</primary>
|
||||||
|
<secondary>public</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In the previous sections we created tables without specifying any
|
In the previous sections we created tables without specifying any
|
||||||
schema names. By default, such tables (and other objects) are
|
schema names. By default, such tables (and other objects) are
|
||||||
@ -1417,11 +1607,11 @@ CREATE TABLE public.products ( ... );
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>unqualified names</primary>
|
<primary>unqualified name</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>names</primary>
|
<primary>name</primary>
|
||||||
<secondary>unqualified</secondary>
|
<secondary>unqualified</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -1437,6 +1627,11 @@ CREATE TABLE public.products ( ... );
|
|||||||
in other schemas in the database.
|
in other schemas in the database.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>schema</primary>
|
||||||
|
<secondary>current</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The first schema named in the search path is called the current schema.
|
The first schema named in the search path is called the current schema.
|
||||||
Aside from being the first schema searched, it is also the schema in
|
Aside from being the first schema searched, it is also the schema in
|
||||||
@ -1444,6 +1639,10 @@ CREATE TABLE public.products ( ... );
|
|||||||
command does not specify a schema name.
|
command does not specify a schema name.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>search_path</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To show the current search path, use the following command:
|
To show the current search path, use the following command:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -1523,6 +1722,11 @@ SELECT 3 OPERATOR(pg_catalog.+) 4;
|
|||||||
<sect2 id="ddl-schemas-priv">
|
<sect2 id="ddl-schemas-priv">
|
||||||
<title>Schemas and Privileges</title>
|
<title>Schemas and Privileges</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-schemas-priv">
|
||||||
|
<primary>privilege</primary>
|
||||||
|
<secondary sortas="schemas">for schemas</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
By default, users cannot see the objects in schemas they do not
|
By default, users cannot see the objects in schemas they do not
|
||||||
own. To allow that, the owner of the schema needs to grant the
|
own. To allow that, the owner of the schema needs to grant the
|
||||||
@ -1550,9 +1754,14 @@ REVOKE CREATE ON SCHEMA public FROM PUBLIC;
|
|||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2 id="ddl-schemas-catalog">
|
||||||
<title>The System Catalog Schema</title>
|
<title>The System Catalog Schema</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-schemas-catalog">
|
||||||
|
<primary>system catalog</primary>
|
||||||
|
<secondary>schema</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In addition to <literal>public</> and user-created schemas, each
|
In addition to <literal>public</> and user-created schemas, each
|
||||||
database contains a <literal>pg_catalog</> schema, which contains
|
database contains a <literal>pg_catalog</> schema, which contains
|
||||||
@ -1701,6 +1910,16 @@ REVOKE CREATE ON SCHEMA public FROM PUBLIC;
|
|||||||
<sect1 id="ddl-depend">
|
<sect1 id="ddl-depend">
|
||||||
<title>Dependency Tracking</title>
|
<title>Dependency Tracking</title>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-depend">
|
||||||
|
<primary>CASCADE</primary>
|
||||||
|
<secondary sortas="DROP">with DROP</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="ddl-depend">
|
||||||
|
<primary>RESTRICT</primary>
|
||||||
|
<secondary sortas="DROP">with DROP</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When you create complex database structures involving many tables
|
When you create complex database structures involving many tables
|
||||||
with foreign key constraints, views, triggers, functions, etc. you
|
with foreign key constraints, views, triggers, functions, etc. you
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.25 2003/04/10 01:22:44 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.25.2.1 2003/09/07 04:36:41 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<sect2 id="dfunc">
|
<sect2 id="dfunc">
|
||||||
@ -8,9 +8,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.25 2003/04/10 01:22:44 peter
|
|||||||
<para>
|
<para>
|
||||||
Before you are able to use your
|
Before you are able to use your
|
||||||
<productname>PostgreSQL</productname> extension functions written in
|
<productname>PostgreSQL</productname> extension functions written in
|
||||||
C, they must be compiled and linked in a special way to produce a file
|
C, they must be compiled and linked in a special way to produce a
|
||||||
that can be dynamically loaded by the server. To be
|
file that can be dynamically loaded by the server. To be precise, a
|
||||||
precise, a <firstterm>shared library</firstterm> needs to be created.
|
<firstterm>shared library</firstterm> needs to be
|
||||||
|
created.<indexterm><primary>shared library</></indexterm>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -26,17 +28,18 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.25 2003/04/10 01:22:44 peter
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm><primary>PIC</></>
|
<indexterm><primary>PIC</></> Creating shared libraries is generally
|
||||||
Creating shared libraries is generally analogous to linking
|
analogous to linking executables: first the source files are
|
||||||
executables: first the source files are compiled into object files,
|
compiled into object files, then the object files are linked
|
||||||
then the object files are linked together. The object files need to
|
together. The object files need to be created as
|
||||||
be created as <firstterm>position-independent code</firstterm>
|
<firstterm>position-independent code</firstterm>
|
||||||
(<acronym>PIC</acronym>), which conceptually means that they can be
|
(<acronym>PIC</acronym>),<indexterm><primary>PIC</></> which
|
||||||
placed at an arbitrary location in memory when they are loaded by the
|
conceptually means that they can be placed at an arbitrary location
|
||||||
executable. (Object files intended for executables are usually not compiled
|
in memory when they are loaded by the executable. (Object files
|
||||||
that way.) The command to link a shared library contains special
|
intended for executables are usually not compiled that way.) The
|
||||||
flags to distinguish it from linking an executable. --- At least
|
command to link a shared library contains special flags to
|
||||||
this is the theory. On some systems the practice is much uglier.
|
distinguish it from linking an executable. --- At least this is the
|
||||||
|
theory. On some systems the practice is much uglier.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -57,7 +60,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.25 2003/04/10 01:22:44 peter
|
|||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">BSD/OS</></term>
|
<term><systemitem class="osname">BSD/OS</></term>
|
||||||
<indexterm><primary>BSD/OS</></>
|
<indexterm><primary>BSD/OS</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -75,7 +78,7 @@ ld -shared -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">FreeBSD</></term>
|
<term><systemitem class="osname">FreeBSD</></term>
|
||||||
<indexterm><primary>FreeBSD</></>
|
<indexterm><primary>FreeBSD</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -93,7 +96,7 @@ gcc -shared -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">HP-UX</></term>
|
<term><systemitem class="osname">HP-UX</></term>
|
||||||
<indexterm><primary>HP-UX</></>
|
<indexterm><primary>HP-UX</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag of the system compiler to create
|
The compiler flag of the system compiler to create
|
||||||
@ -120,7 +123,7 @@ ld -b -o foo.sl foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">IRIX</></term>
|
<term><systemitem class="osname">IRIX</></term>
|
||||||
<indexterm><primary>IRIX</></>
|
<indexterm><primary>IRIX</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<acronym>PIC</acronym> is the default, no special compiler
|
<acronym>PIC</acronym> is the default, no special compiler
|
||||||
@ -136,7 +139,7 @@ ld -shared -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">Linux</></term>
|
<term><systemitem class="osname">Linux</></term>
|
||||||
<indexterm><primary>Linux</></>
|
<indexterm><primary>Linux</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -155,7 +158,7 @@ cc -shared -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">MacOS X</></term>
|
<term><systemitem class="osname">MacOS X</></term>
|
||||||
<indexterm><primary>MacOS X</></>
|
<indexterm><primary>MacOS X</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Here is an example. It assumes the developer tools are installed.
|
Here is an example. It assumes the developer tools are installed.
|
||||||
@ -169,7 +172,7 @@ cc -bundle -flat_namespace -undefined suppress -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">NetBSD</></term>
|
<term><systemitem class="osname">NetBSD</></term>
|
||||||
<indexterm><primary>NetBSD</></>
|
<indexterm><primary>NetBSD</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -187,7 +190,7 @@ gcc -shared -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">OpenBSD</></term>
|
<term><systemitem class="osname">OpenBSD</></term>
|
||||||
<indexterm><primary>OpenBSD</></>
|
<indexterm><primary>OpenBSD</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -203,7 +206,7 @@ ld -Bshareable -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">Solaris</></term>
|
<term><systemitem class="osname">Solaris</></term>
|
||||||
<indexterm><primary>Solaris</></>
|
<indexterm><primary>Solaris</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is
|
The compiler flag to create <acronym>PIC</acronym> is
|
||||||
@ -227,7 +230,7 @@ gcc -G -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">Tru64 UNIX</></term>
|
<term><systemitem class="osname">Tru64 UNIX</></term>
|
||||||
<indexterm><primary>Tru64 UNIX</></>
|
<indexterm><primary>Tru64 UNIX</><secondary>shared library</></>
|
||||||
<indexterm><primary>Digital UNIX</><see>Tru64 UNIX</></>
|
<indexterm><primary>Digital UNIX</><see>Tru64 UNIX</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
@ -246,7 +249,7 @@ ld -shared -expect_unresolved '*' -o foo.so foo.o
|
|||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><systemitem class="osname">UnixWare</></term>
|
<term><systemitem class="osname">UnixWare</></term>
|
||||||
<indexterm><primary>UnixWare</></>
|
<indexterm><primary>UnixWare</><secondary>shared library</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The compiler flag to create <acronym>PIC</acronym> is <option>-K
|
The compiler flag to create <acronym>PIC</acronym> is <option>-K
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/dml.sgml,v 1.5 2003/08/10 01:20:34 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/dml.sgml,v 1.5.2.1 2003/09/07 04:36:41 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="dml">
|
<chapter id="dml">
|
||||||
<title>Data Manipulation</title>
|
<title>Data Manipulation</title>
|
||||||
@ -20,6 +20,14 @@
|
|||||||
<sect1 id="dml-insert">
|
<sect1 id="dml-insert">
|
||||||
<title>Inserting Data</title>
|
<title>Inserting Data</title>
|
||||||
|
|
||||||
|
<indexterm zone="dml-insert">
|
||||||
|
<primary>inserting</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="dml-insert">
|
||||||
|
<primary>INSERT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When a table is created, it contains no data. The first thing to
|
When a table is created, it contains no data. The first thing to
|
||||||
do before a database can be of much use is to insert data. Data is
|
do before a database can be of much use is to insert data. Data is
|
||||||
@ -98,6 +106,14 @@ INSERT INTO products DEFAULT VALUES;
|
|||||||
<sect1 id="dml-update">
|
<sect1 id="dml-update">
|
||||||
<title>Updating Data</title>
|
<title>Updating Data</title>
|
||||||
|
|
||||||
|
<indexterm zone="dml-update">
|
||||||
|
<primary>updating</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="dml-update">
|
||||||
|
<primary>UPDATE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The modification of data that is already in the database is
|
The modification of data that is already in the database is
|
||||||
referred to as updating. You can update individual rows, all the
|
referred to as updating. You can update individual rows, all the
|
||||||
@ -182,6 +198,14 @@ UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
|
|||||||
<sect1 id="dml-delete">
|
<sect1 id="dml-delete">
|
||||||
<title>Deleting Data</title>
|
<title>Deleting Data</title>
|
||||||
|
|
||||||
|
<indexterm zone="dml-delete">
|
||||||
|
<primary>deleting</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="dml-delete">
|
||||||
|
<primary>DELETE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
So far we have explained how to add data to tables and how to
|
So far we have explained how to add data to tables and how to
|
||||||
change data. What remains is to discuss how to remove data that is
|
change data. What remains is to discuss how to remove data that is
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.48 2003/08/07 04:17:21 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.48.2.1 2003/09/07 04:36:41 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="ecpg">
|
<chapter id="ecpg">
|
||||||
<title><application>ECPG</application> - Embedded <acronym>SQL</acronym> in C</title>
|
<title><application>ECPG</application> - Embedded <acronym>SQL</acronym> in C</title>
|
||||||
|
|
||||||
<indexterm zone="ecpg"><primary>embedded SQL</primary><secondary>in C</secondary></indexterm>
|
<indexterm zone="ecpg"><primary>embedded SQL</primary><secondary>in C</secondary></indexterm>
|
||||||
|
<indexterm zone="ecpg"><primary>C</primary></indexterm>
|
||||||
|
<indexterm zone="ecpg"><primary>ECPG</primary></indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
This chapter describes the embedded <acronym>SQL</acronym> package
|
This chapter describes the embedded <acronym>SQL</acronym> package
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v 1.23 2003/08/09 22:50:21 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v 1.23.2.1 2003/09/07 04:36:41 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="extend">
|
<chapter id="extend">
|
||||||
@ -80,16 +80,25 @@ $Header: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v 1.23 2003/08/09 22:50:21 tgl
|
|||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="type-system">
|
<sect1 id="extend-type-system">
|
||||||
<title>The <productname>PostgreSQL</productname> Type System</title>
|
<title>The <productname>PostgreSQL</productname> Type System</title>
|
||||||
|
|
||||||
<indexterm zone="type-system">
|
<indexterm zone="extend-type-system">
|
||||||
<primary>extending SQL</primary>
|
<primary>base type</primary>
|
||||||
<secondary>types</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm zone="type-system">
|
<indexterm zone="extend-type-system">
|
||||||
<primary>data types</primary>
|
<primary>data type</primary>
|
||||||
|
<secondary>base</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="extend-type-system">
|
||||||
|
<primary>composite type</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="extend-type-system">
|
||||||
|
<primary>data type</primary>
|
||||||
|
<secondary>composite</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -138,15 +147,25 @@ $Header: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v 1.23 2003/08/09 22:50:21 tgl
|
|||||||
pseudo-types.
|
pseudo-types.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect2 id="types-polymorphic">
|
<sect2 id="extend-types-polymorphic">
|
||||||
<title>Polymorphic Types and Functions</title>
|
<title>Polymorphic Types and Functions</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm zone="extend-types-polymorphic">
|
||||||
<primary>polymorphic types</primary>
|
<primary>polymorphic type</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm zone="extend-types-polymorphic">
|
||||||
<primary>polymorphic functions</primary>
|
<primary>polymorphic function</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="extend-types-polymorphic">
|
||||||
|
<primary>type</primary>
|
||||||
|
<secondary>polymorphic</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="extend-types-polymorphic">
|
||||||
|
<primary>function</primary>
|
||||||
|
<secondary>polymorphic</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.29 2003/05/18 20:55:56 petere Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.29.2.1 2003/09/07 04:36:41 momjian Exp $ -->
|
||||||
|
|
||||||
<!entity history SYSTEM "history.sgml">
|
<!entity history SYSTEM "history.sgml">
|
||||||
<!entity info SYSTEM "info.sgml">
|
<!entity info SYSTEM "info.sgml">
|
||||||
@ -68,7 +68,6 @@
|
|||||||
<!entity libpgeasy SYSTEM "libpgeasy.sgml">
|
<!entity libpgeasy SYSTEM "libpgeasy.sgml">
|
||||||
<!entity libpq SYSTEM "libpq.sgml">
|
<!entity libpq SYSTEM "libpq.sgml">
|
||||||
<!entity libpgtcl SYSTEM "libpgtcl.sgml">
|
<!entity libpgtcl SYSTEM "libpgtcl.sgml">
|
||||||
<!entity pygresql SYSTEM "pygresql.sgml">
|
|
||||||
<!entity lobj SYSTEM "lobj.sgml">
|
<!entity lobj SYSTEM "lobj.sgml">
|
||||||
<!entity odbc SYSTEM "odbc.sgml">
|
<!entity odbc SYSTEM "odbc.sgml">
|
||||||
<!entity rules SYSTEM "rules.sgml">
|
<!entity rules SYSTEM "rules.sgml">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.166 2003/08/10 01:20:34 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.166.2.1 2003/09/07 04:36:41 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -7,11 +7,11 @@ PostgreSQL documentation
|
|||||||
<title>Functions and Operators</title>
|
<title>Functions and Operators</title>
|
||||||
|
|
||||||
<indexterm zone="functions">
|
<indexterm zone="functions">
|
||||||
<primary>functions</primary>
|
<primary>function</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm zone="functions">
|
<indexterm zone="functions">
|
||||||
<primary>operators</primary>
|
<primary>operator</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -40,7 +40,7 @@ PostgreSQL documentation
|
|||||||
<title>Logical Operators</title>
|
<title>Logical Operators</title>
|
||||||
|
|
||||||
<indexterm zone="functions-logical">
|
<indexterm zone="functions-logical">
|
||||||
<primary>operators</primary>
|
<primary>operator</primary>
|
||||||
<secondary>logical</secondary>
|
<secondary>logical</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -54,18 +54,27 @@ PostgreSQL documentation
|
|||||||
The usual logical operators are available:
|
The usual logical operators are available:
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>and</primary>
|
<primary>AND (operator)</primary>
|
||||||
<secondary>operator</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>or</primary>
|
<primary>OR (operator)</primary>
|
||||||
<secondary>operator</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>not</primary>
|
<primary>NOT (operator)</primary>
|
||||||
<secondary>operator</secondary>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>conjunction</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>disjunction</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>negation</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<simplelist>
|
<simplelist>
|
||||||
@ -252,7 +261,7 @@ PostgreSQL documentation
|
|||||||
<primary>between</primary>
|
<primary>between</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
In addition to the comparison operators, the special
|
In addition to the comparison operators, the special
|
||||||
<token>BETWEEN</token> construct is available.
|
<token>BETWEEN</token> construct is available.<indexterm><primary>BETWEEN</primary></indexterm>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
<replaceable>a</replaceable> BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
|
<replaceable>a</replaceable> BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
|
||||||
</synopsis>
|
</synopsis>
|
||||||
@ -284,6 +293,7 @@ PostgreSQL documentation
|
|||||||
<replaceable>expression</replaceable> ISNULL
|
<replaceable>expression</replaceable> ISNULL
|
||||||
<replaceable>expression</replaceable> NOTNULL
|
<replaceable>expression</replaceable> NOTNULL
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
<indexterm><primary>null value</primary><secondary>comparing</secondary></indexterm>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -847,7 +857,7 @@ PostgreSQL documentation
|
|||||||
<entry>
|
<entry>
|
||||||
String concatenation
|
String concatenation
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>character strings</primary>
|
<primary>character string</primary>
|
||||||
<secondary>concatenation</secondary>
|
<secondary>concatenation</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</entry>
|
</entry>
|
||||||
@ -869,12 +879,12 @@ PostgreSQL documentation
|
|||||||
<entry>
|
<entry>
|
||||||
Number of characters in string
|
Number of characters in string
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>character strings</primary>
|
<primary>character string</primary>
|
||||||
<secondary>length</secondary>
|
<secondary>length</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>length</primary>
|
<primary>length</primary>
|
||||||
<secondary>character strings</secondary>
|
<secondary sortas="character string">of a character string</secondary>
|
||||||
<see>character strings, length</see>
|
<see>character strings, length</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</entry>
|
</entry>
|
||||||
@ -1110,12 +1120,12 @@ PostgreSQL documentation
|
|||||||
<entry>
|
<entry>
|
||||||
Number of characters in string
|
Number of characters in string
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>character strings</primary>
|
<primary>character string</primary>
|
||||||
<secondary>length</secondary>
|
<secondary>length</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>length</primary>
|
<primary>length</primary>
|
||||||
<secondary>character strings</secondary>
|
<secondary sortas="character string">of a character string</secondary>
|
||||||
<see>character strings, length</see>
|
<see>character strings, length</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</entry>
|
</entry>
|
||||||
@ -1174,7 +1184,7 @@ PostgreSQL documentation
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><literal><function>quote_ident</function>(<parameter>string</parameter> text)</literal></entry>
|
<entry><literal><function>quote_ident</function>(<parameter>string</parameter> text)</literal><indexterm><primary>quote_ident</></></entry>
|
||||||
<entry><type>text</type></entry>
|
<entry><type>text</type></entry>
|
||||||
<entry>
|
<entry>
|
||||||
Return the given string suitably quoted to be used as an identifier
|
Return the given string suitably quoted to be used as an identifier
|
||||||
@ -1188,7 +1198,7 @@ PostgreSQL documentation
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><literal><function>quote_literal</function>(<parameter>string</parameter> text)</literal></entry>
|
<entry><literal><function>quote_literal</function>(<parameter>string</parameter> text)</literal><indexterm><primary>quote_literal</></></entry>
|
||||||
<entry><type>text</type></entry>
|
<entry><type>text</type></entry>
|
||||||
<entry>
|
<entry>
|
||||||
Return the given string suitably quoted to be used as a string literal
|
Return the given string suitably quoted to be used as a string literal
|
||||||
@ -2055,6 +2065,11 @@ PostgreSQL documentation
|
|||||||
<sect1 id="functions-binarystring">
|
<sect1 id="functions-binarystring">
|
||||||
<title>Binary String Functions and Operators</title>
|
<title>Binary String Functions and Operators</title>
|
||||||
|
|
||||||
|
<indexterm zone="functions-binarystring">
|
||||||
|
<primary>binary data</primary>
|
||||||
|
<secondary>functions</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
This section describes functions and operators for examining and
|
This section describes functions and operators for examining and
|
||||||
manipulating values of type <type>bytea</type>.
|
manipulating values of type <type>bytea</type>.
|
||||||
@ -2092,7 +2107,7 @@ PostgreSQL documentation
|
|||||||
<entry>
|
<entry>
|
||||||
String concatenation
|
String concatenation
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>binary strings</primary>
|
<primary>binary string</primary>
|
||||||
<secondary>concatenation</secondary>
|
<secondary>concatenation</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</entry>
|
</entry>
|
||||||
@ -2243,12 +2258,12 @@ PostgreSQL documentation
|
|||||||
<entry>
|
<entry>
|
||||||
Length of binary string
|
Length of binary string
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>binary strings</primary>
|
<primary>binary string</primary>
|
||||||
<secondary>length</secondary>
|
<secondary>length</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>length</primary>
|
<primary>length</primary>
|
||||||
<secondary>binary strings</secondary>
|
<secondary sortas="binary string">of a binary string</secondary>
|
||||||
<see>binary strings, length</see>
|
<see>binary strings, length</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
</entry>
|
</entry>
|
||||||
@ -2321,8 +2336,8 @@ PostgreSQL documentation
|
|||||||
<sect2 id="functions-like">
|
<sect2 id="functions-like">
|
||||||
<title><function>LIKE</function></title>
|
<title><function>LIKE</function></title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm zone="functions-like">
|
||||||
<primary>like</primary>
|
<primary>LIKE</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<synopsis>
|
<synopsis>
|
||||||
@ -2420,12 +2435,12 @@ PostgreSQL documentation
|
|||||||
Regular Expressions</title>
|
Regular Expressions</title>
|
||||||
|
|
||||||
<indexterm zone="functions-sql99-regexp">
|
<indexterm zone="functions-sql99-regexp">
|
||||||
<primary>regular expressions</primary>
|
<primary>regular expression</primary>
|
||||||
<!-- <seealso>pattern matching</seealso> breaks index build -->
|
<!-- <seealso>pattern matching</seealso> breaks index build -->
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>similar to</primary>
|
<primary>SIMILAR TO</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
@ -2547,7 +2562,7 @@ substring('foobar' from '#"o_b#"%' for '#') <lineannotation>NULL</lineannotat
|
|||||||
<title><acronym>POSIX</acronym> Regular Expressions</title>
|
<title><acronym>POSIX</acronym> Regular Expressions</title>
|
||||||
|
|
||||||
<indexterm zone="functions-posix-regexp">
|
<indexterm zone="functions-posix-regexp">
|
||||||
<primary>regular expressions</primary>
|
<primary>regular expression</primary>
|
||||||
<seealso>pattern matching</seealso>
|
<seealso>pattern matching</seealso>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -3794,6 +3809,10 @@ substring('foobar' from 'o(.)b') <lineannotation>o</lineannotation>
|
|||||||
<primary>formatting</primary>
|
<primary>formatting</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="functions-formatting">
|
||||||
|
<primary>to_char</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <productname>PostgreSQL</productname> formatting functions
|
The <productname>PostgreSQL</productname> formatting functions
|
||||||
provide a powerful set of tools for converting various data types
|
provide a powerful set of tools for converting various data types
|
||||||
@ -3870,6 +3889,11 @@ substring('foobar' from 'o(.)b') <lineannotation>o</lineannotation>
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Warning. <literal><function>to_char</function>(<type>interval</type>, <type>text</type>)</literal>
|
||||||
|
is deprecated and should not be used in newly-written code. Will be removed in the next version.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In an output template string (for <function>to_char</>), there are certain patterns that are
|
In an output template string (for <function>to_char</>), there are certain patterns that are
|
||||||
recognized and replaced with appropriately-formatted data from the value
|
recognized and replaced with appropriately-formatted data from the value
|
||||||
@ -5999,7 +6023,7 @@ SELECT TIMESTAMP 'now';
|
|||||||
<title>Sequence-Manipulation Functions</title>
|
<title>Sequence-Manipulation Functions</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>sequences</primary>
|
<primary>sequence</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>nextval</primary>
|
<primary>nextval</primary>
|
||||||
@ -6162,11 +6186,11 @@ SELECT setval('foo', 42, false); <lineannotation>Next <function>nextval</> wi
|
|||||||
<title>Conditional Expressions</title>
|
<title>Conditional Expressions</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>case</primary>
|
<primary>CASE</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>conditionals</primary>
|
<primary>conditional expression</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -6287,8 +6311,12 @@ SELECT a,
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title><literal>COALESCE</></title>
|
<title><literal>COALESCE</></title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>COALESCE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<synopsis>
|
<synopsis>
|
||||||
<function>COALESCE</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
|
<function>coalesce</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -6497,7 +6525,8 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ..
|
|||||||
|
|
||||||
<indexterm zone="functions-misc">
|
<indexterm zone="functions-misc">
|
||||||
<primary>configuration</primary>
|
<primary>configuration</primary>
|
||||||
<secondary>server</secondary>
|
<secondary sortas="server">of the server</secondary>
|
||||||
|
<tertiary>functions</tertiary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -6534,6 +6563,11 @@ SELECT set_config('show_statement_stats', 'off', false);
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>privilege</primary>
|
||||||
|
<secondary>querying</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<xref linkend="functions-misc-access-table"> lists functions that
|
<xref linkend="functions-misc-access-table"> lists functions that
|
||||||
allow the user to query object access privileges programmatically.
|
allow the user to query object access privileges programmatically.
|
||||||
@ -6966,6 +7000,11 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
<primary>col_description</primary>
|
<primary>col_description</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="functions-misc">
|
||||||
|
<primary>comment</primary>
|
||||||
|
<secondary sortas="database objects">about database objects</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The function shown in <xref
|
The function shown in <xref
|
||||||
linkend="functions-misc-comment-table"> extract comments
|
linkend="functions-misc-comment-table"> extract comments
|
||||||
@ -7027,7 +7066,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<xref linkend="array-operators-table"> shows the operators
|
<xref linkend="array-operators-table"> shows the operators
|
||||||
available for the <type>array</type> types.
|
available for <type>array</type> types.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<table id="array-operators-table">
|
<table id="array-operators-table">
|
||||||
@ -7088,7 +7127,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
<entry> <literal>||</literal> </entry>
|
<entry> <literal>||</literal> </entry>
|
||||||
<entry>array-to-array concatenation</entry>
|
<entry>array-to-array concatenation</entry>
|
||||||
<entry><literal>ARRAY[1,2,3] || ARRAY[4,5,6]</literal></entry>
|
<entry><literal>ARRAY[1,2,3] || ARRAY[4,5,6]</literal></entry>
|
||||||
<entry><literal>{{1,2,3},{4,5,6}}</literal></entry>
|
<entry><literal>{1,2,3,4,5,6}</literal></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
@ -7115,6 +7154,11 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
See <xref linkend="arrays"> for more details about array operator
|
||||||
|
behavior.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<xref linkend="array-functions-table"> shows the functions
|
<xref linkend="array-functions-table"> shows the functions
|
||||||
available for use with array types. See <xref linkend="arrays">
|
available for use with array types. See <xref linkend="arrays">
|
||||||
@ -7162,7 +7206,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
for <literal>NULL</literal> inputs
|
for <literal>NULL</literal> inputs
|
||||||
</entry>
|
</entry>
|
||||||
<entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5,6])</literal></entry>
|
<entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5,6])</literal></entry>
|
||||||
<entry><literal>{{1,2,3},{4,5,6}}</literal></entry>
|
<entry><literal>{1,2,3,4,5,6}</literal></entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>
|
<entry>
|
||||||
@ -7262,6 +7306,11 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
<sect1 id="functions-aggregate">
|
<sect1 id="functions-aggregate">
|
||||||
<title>Aggregate Functions</title>
|
<title>Aggregate Functions</title>
|
||||||
|
|
||||||
|
<indexterm zone="functions-aggregate">
|
||||||
|
<primary>aggregate function</primary>
|
||||||
|
<secondary>built-in</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<firstterm>Aggregate functions</firstterm> compute a single result
|
<firstterm>Aggregate functions</firstterm> compute a single result
|
||||||
value from a set of input values. <xref
|
value from a set of input values. <xref
|
||||||
@ -7290,7 +7339,6 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
|
|||||||
<entry>
|
<entry>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>average</primary>
|
<primary>average</primary>
|
||||||
<secondary>function</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<function>avg(<replaceable class="parameter">expression</replaceable>)</function>
|
<function>avg(<replaceable class="parameter">expression</replaceable>)</function>
|
||||||
</entry>
|
</entry>
|
||||||
@ -7472,31 +7520,31 @@ SELECT col FROM sometable ORDER BY col ASC LIMIT 1;
|
|||||||
<title>Subquery Expressions</title>
|
<title>Subquery Expressions</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>exists</primary>
|
<primary>EXISTS</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>in</primary>
|
<primary>IN</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>not in</primary>
|
<primary>NOT IN</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>any</primary>
|
<primary>ANY</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>all</primary>
|
<primary>ALL</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>some</primary>
|
<primary>SOME</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>subqueries</primary>
|
<primary>subquery</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -7798,6 +7846,11 @@ SELECT col1 FROM tab1
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Row-wise Comparison</title>
|
<title>Row-wise Comparison</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>comparison</primary>
|
||||||
|
<secondary>of rows</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<synopsis>
|
<synopsis>
|
||||||
(<replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> ...</optional>) <replaceable>operator</replaceable> (<replaceable>subquery</replaceable>)
|
(<replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> ...</optional>) <replaceable>operator</replaceable> (<replaceable>subquery</replaceable>)
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/indices.sgml,v 1.42 2003/05/28 16:03:55 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/indices.sgml,v 1.42.2.1 2003/09/07 04:36:41 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="indexes">
|
<chapter id="indexes">
|
||||||
<title id="indexes-title">Indexes</title>
|
<title id="indexes-title">Indexes</title>
|
||||||
|
|
||||||
<indexterm zone="indexes">
|
<indexterm zone="indexes">
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -109,12 +109,12 @@ CREATE INDEX test1_id_index ON test1 (id);
|
|||||||
B-tree, R-tree, GiST, and Hash. Each index type is more appropriate for
|
B-tree, R-tree, GiST, and Hash. Each index type is more appropriate for
|
||||||
a particular query type because of the algorithm it uses.
|
a particular query type because of the algorithm it uses.
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>B-tree</secondary>
|
<secondary>B-tree</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>B-tree</primary>
|
<primary>B-tree</primary>
|
||||||
<see>indexes</see>
|
<see>index</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
By
|
By
|
||||||
default, the <command>CREATE INDEX</command> command will create a
|
default, the <command>CREATE INDEX</command> command will create a
|
||||||
@ -147,12 +147,12 @@ CREATE INDEX test1_id_index ON test1 (id);
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>R-tree</secondary>
|
<secondary>R-tree</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>R-tree</primary>
|
<primary>R-tree</primary>
|
||||||
<see>indexes</see>
|
<see>index</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
R-tree indexes are especially suited for spatial data. To create
|
R-tree indexes are especially suited for spatial data. To create
|
||||||
an R-tree index, use a command of the form
|
an R-tree index, use a command of the form
|
||||||
@ -178,12 +178,12 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>hash</secondary>
|
<secondary>hash</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>hash</primary>
|
<primary>hash</primary>
|
||||||
<see>indexes</see>
|
<see>index</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
The query planner will consider using a hash index whenever an
|
The query planner will consider using a hash index whenever an
|
||||||
indexed column is involved in a comparison using the
|
indexed column is involved in a comparison using the
|
||||||
@ -219,7 +219,7 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
|
|||||||
<title>Multicolumn Indexes</title>
|
<title>Multicolumn Indexes</title>
|
||||||
|
|
||||||
<indexterm zone="indexes-multicolumn">
|
<indexterm zone="indexes-multicolumn">
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>multicolumn</secondary>
|
<secondary>multicolumn</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ SELECT name FROM test2 WHERE major = <replaceable>constant</replaceable> OR mino
|
|||||||
<title>Unique Indexes</title>
|
<title>Unique Indexes</title>
|
||||||
|
|
||||||
<indexterm zone="indexes-unique">
|
<indexterm zone="indexes-unique">
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>unique</secondary>
|
<secondary>unique</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -337,8 +337,8 @@ CREATE UNIQUE INDEX <replaceable>name</replaceable> ON <replaceable>table</repla
|
|||||||
<title>Indexes on Expressions</title>
|
<title>Indexes on Expressions</title>
|
||||||
|
|
||||||
<indexterm zone="indexes-expressional">
|
<indexterm zone="indexes-expressional">
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>on expressions</secondary>
|
<secondary sortas="expressions">on expressions</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -392,6 +392,10 @@ CREATE INDEX people_names ON people ((first_name || ' ' || last_name));
|
|||||||
<sect1 id="indexes-opclass">
|
<sect1 id="indexes-opclass">
|
||||||
<title>Operator Classes</title>
|
<title>Operator Classes</title>
|
||||||
|
|
||||||
|
<indexterm zone="indexes-opclass">
|
||||||
|
<primary>operator class</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
An index definition may specify an <firstterm>operator
|
An index definition may specify an <firstterm>operator
|
||||||
class</firstterm> for each column of an index.
|
class</firstterm> for each column of an index.
|
||||||
@ -492,7 +496,7 @@ SELECT am.amname AS index_method,
|
|||||||
<title>Partial Indexes</title>
|
<title>Partial Indexes</title>
|
||||||
|
|
||||||
<indexterm zone="indexes-partial">
|
<indexterm zone="indexes-partial">
|
||||||
<primary>indexes</primary>
|
<primary>index</primary>
|
||||||
<secondary>partial</secondary>
|
<secondary>partial</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -709,6 +713,11 @@ CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)
|
|||||||
<sect1 id="indexes-examine">
|
<sect1 id="indexes-examine">
|
||||||
<title>Examining Index Usage</title>
|
<title>Examining Index Usage</title>
|
||||||
|
|
||||||
|
<indexterm zone="indexes-examine">
|
||||||
|
<primary>index</primary>
|
||||||
|
<secondary>examining usage</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Although indexes in <productname>PostgreSQL</> do not need
|
Although indexes in <productname>PostgreSQL</> do not need
|
||||||
maintenance and tuning, it is still important to check
|
maintenance and tuning, it is still important to check
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.138 2003/08/04 04:03:03 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.138.2.1 2003/09/07 04:36:41 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="installation">
|
<chapter id="installation">
|
||||||
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
||||||
@ -169,10 +169,9 @@ su - postgres
|
|||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
To build the Python interface module or the PL/Python server
|
To build the PL/Python server programming language, you need a
|
||||||
programming language, you need a Python installation, including
|
Python installation, including the header files. Since
|
||||||
the header files.
|
PL/Python will be a shared library, the
|
||||||
Since PL/Python will be a shared library, the
|
|
||||||
<indexterm><primary>libpython</primary></indexterm>
|
<indexterm><primary>libpython</primary></indexterm>
|
||||||
<filename>libpython</filename> library must be a shared library
|
<filename>libpython</filename> library must be a shared library
|
||||||
also on most platforms. This is not the case in a default
|
also on most platforms. This is not the case in a default
|
||||||
@ -383,6 +382,7 @@ JAVACMD=$JAVA_HOME/bin/java
|
|||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>pg_dumpall</primary>
|
<primary>pg_dumpall</primary>
|
||||||
|
<secondary>use during upgrade</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
To back up your database installation, type:
|
To back up your database installation, type:
|
||||||
@ -750,10 +750,7 @@ JAVACMD=$JAVA_HOME/bin/java
|
|||||||
<term><option>--with-python</option></term>
|
<term><option>--with-python</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Build the Python interface module and the PL/Python
|
Build the PL/Python server-side language.
|
||||||
server-side language. You need to have root access to be able
|
|
||||||
to install the Python module at its default place
|
|
||||||
(<filename>/usr/lib/python<replaceable>x</>.<replaceable>y</></>).
|
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -875,8 +872,8 @@ JAVACMD=$JAVA_HOME/bin/java
|
|||||||
<term><option>--with-pam</option></term>
|
<term><option>--with-pam</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Build with <acronym>PAM</> (Pluggable Authentication Modules)
|
Build with <acronym>PAM</><indexterm><primary>PAM</></>
|
||||||
support.
|
(Pluggable Authentication Modules) support.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -1078,20 +1075,6 @@ All of PostgreSQL is successfully made. Ready to install.
|
|||||||
possibly can, you will have to do manual work.
|
possibly can, you will have to do manual work.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
|
||||||
If you built the Python interfaces and you were not the
|
|
||||||
root user when you executed the above command then that part of
|
|
||||||
the installation probably failed. In that case you should become
|
|
||||||
the root user and then do
|
|
||||||
<screen>
|
|
||||||
<userinput>gmake -C src/interfaces/python install</userinput>
|
|
||||||
</screen>
|
|
||||||
If you do not have root access you are on your own:
|
|
||||||
you can still take the required files and place them in
|
|
||||||
other directories where Python can find them, but how to
|
|
||||||
do that is left as an exercise.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The standard installation provides only the header files needed for client
|
The standard installation provides only the header files needed for client
|
||||||
application development. If you plan to do any server-side program
|
application development. If you plan to do any server-side program
|
||||||
@ -1163,7 +1146,7 @@ All of PostgreSQL is successfully made. Ready to install.
|
|||||||
<title>Shared Libraries</title>
|
<title>Shared Libraries</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>shared libraries</primary>
|
<primary>shared library</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1284,7 +1267,6 @@ set path = ( /usr/local/pgsql/bin $path )
|
|||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary><envar>MANPATH</envar></primary>
|
<primary><envar>MANPATH</envar></primary>
|
||||||
<seealso>man pages</seealso>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
To enable your system to find the <application>man</>
|
To enable your system to find the <application>man</>
|
||||||
documentation, you need to add lines like the following to a
|
documentation, you need to add lines like the following to a
|
||||||
|
@ -1,10 +1,18 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/jdbc.sgml,v 1.47 2003/08/07 05:06:40 barry Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/jdbc.sgml,v 1.47.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="jdbc">
|
<chapter id="jdbc">
|
||||||
<title><acronym>JDBC</acronym> Interface</title>
|
<title><acronym>JDBC</acronym> Interface</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc">
|
||||||
|
<primary>JDBC</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc">
|
||||||
|
<primary>Java</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<acronym>JDBC</acronym> is a core <acronym>API</acronym> of Java 1.1 and later.
|
<acronym>JDBC</acronym> is a core <acronym>API</acronym> of Java 1.1 and later.
|
||||||
It provides a standard set of
|
It provides a standard set of
|
||||||
@ -66,6 +74,14 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/jdbc.sgml,v 1.47 2003/08/07 05:06:40
|
|||||||
<sect2 id="jdbc-classpath">
|
<sect2 id="jdbc-classpath">
|
||||||
<title>Setting up the Class Path</title>
|
<title>Setting up the Class Path</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-classpath">
|
||||||
|
<primary>class path</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-classpath">
|
||||||
|
<primary>CLASSPATH</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To use the driver, the JAR archive (named
|
To use the driver, the JAR archive (named
|
||||||
<filename>postgresql.jar</filename> if you built from source, otherwise
|
<filename>postgresql.jar</filename> if you built from source, otherwise
|
||||||
@ -316,6 +332,18 @@ db.close();
|
|||||||
<sect1 id="jdbc-query">
|
<sect1 id="jdbc-query">
|
||||||
<title>Issuing a Query and Processing the Result</title>
|
<title>Issuing a Query and Processing the Result</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-query">
|
||||||
|
<primary>Statement</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-query">
|
||||||
|
<primary>PreparedStatement</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-query">
|
||||||
|
<primary>ResultSet</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Any time you want to issue <acronym>SQL</acronym> statements to
|
Any time you want to issue <acronym>SQL</acronym> statements to
|
||||||
the database, you require a <classname>Statement</classname> or
|
the database, you require a <classname>Statement</classname> or
|
||||||
@ -681,6 +709,16 @@ st.close();
|
|||||||
<sect1 id="jdbc-binary-data">
|
<sect1 id="jdbc-binary-data">
|
||||||
<title>Storing Binary Data</title>
|
<title>Storing Binary Data</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-binary-data">
|
||||||
|
<primary>bytea</primary>
|
||||||
|
<secondary sortas="JDBC">in JDBC</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-binary-data">
|
||||||
|
<primary>large object</primary>
|
||||||
|
<secondary sortas="JDBC">in JDBC</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<application>PostgreSQL</application> provides two distinct ways to
|
<application>PostgreSQL</application> provides two distinct ways to
|
||||||
store binary data. Binary data can be stored in a table using
|
store binary data. Binary data can be stored in a table using
|
||||||
@ -2597,6 +2635,11 @@ public void unlink(int oid) throws SQLException
|
|||||||
<sect1 id="jdbc-thread">
|
<sect1 id="jdbc-thread">
|
||||||
<title>Using the Driver in a Multithreaded or a Servlet Environment</title>
|
<title>Using the Driver in a Multithreaded or a Servlet Environment</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-thread">
|
||||||
|
<primary>threads</primary>
|
||||||
|
<secondary sortas="JDBC">with JDBC</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A problem with many <acronym>JDBC</acronym> drivers is that only
|
A problem with many <acronym>JDBC</acronym> drivers is that only
|
||||||
one thread can use a <classname>Connection</classname> at any one
|
one thread can use a <classname>Connection</classname> at any one
|
||||||
@ -2645,6 +2688,15 @@ public void unlink(int oid) throws SQLException
|
|||||||
<sect1 id="jdbc-datasource">
|
<sect1 id="jdbc-datasource">
|
||||||
<title>Connection Pools and Data Sources</title>
|
<title>Connection Pools and Data Sources</title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-datasource">
|
||||||
|
<primary>connection pool</primary>
|
||||||
|
<secondary sortas="JDBC">in JDBC</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-datasource">
|
||||||
|
<primary>DataSource</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<acronym>JDBC</> 2 introduced standard connection pooling features in an
|
<acronym>JDBC</> 2 introduced standard connection pooling features in an
|
||||||
add-on <acronym>API</> known as the <acronym>JDBC</acronym> 2.0 Optional
|
add-on <acronym>API</> known as the <acronym>JDBC</acronym> 2.0 Optional
|
||||||
@ -3029,7 +3081,11 @@ try {
|
|||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2 id="jdbc-jndi">
|
<sect2 id="jdbc-jndi">
|
||||||
<title>Data Sources and <acronym>JNDI</acronym></title>
|
<title>Data Sources and <acronym>JNDI</acronym></title>
|
||||||
|
|
||||||
|
<indexterm zone="jdbc-jndi">
|
||||||
|
<primary>JNDI</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
All the <literal>ConnectionPoolDataSource</literal> and
|
All the <literal>ConnectionPoolDataSource</literal> and
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/keywords.sgml,v 2.9 2003/06/12 07:49:43 momjian Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/keywords.sgml,v 2.9.2.1 2003/09/07 04:36:42 momjian Exp $ -->
|
||||||
|
|
||||||
<appendix id="sql-keywords-appendix">
|
<appendix id="sql-keywords-appendix">
|
||||||
<title><acronym>SQL</acronym> Key Words</title>
|
<title><acronym>SQL</acronym> Key Words</title>
|
||||||
|
|
||||||
<indexterm zone="sql-keywords-appendix">
|
<indexterm zone="sql-keywords-appendix">
|
||||||
<primary>key words</primary>
|
<primary>key word</primary>
|
||||||
<secondary>list of</secondary>
|
<secondary>list of</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
@ -125,8 +125,8 @@
|
|||||||
<para>
|
<para>
|
||||||
The <function>pg_lo_*</function> commands are interfaces to the
|
The <function>pg_lo_*</function> commands are interfaces to the
|
||||||
large object features of
|
large object features of
|
||||||
<ProductName>PostgreSQL</ProductName>.<indexterm><primary>Large
|
<ProductName>PostgreSQL</ProductName>.<indexterm><primary>large
|
||||||
Object</></> The functions are designed to mimic the analogous file
|
object</><secondary>in pgctl</></> The functions are designed to mimic the analogous file
|
||||||
system functions in the standard Unix file system interface. The
|
system functions in the standard Unix file system interface. The
|
||||||
<function>pg_lo_*</function> commands should be used within a
|
<function>pg_lo_*</function> commands should be used within a
|
||||||
<command>BEGIN</command>/<command>COMMIT</command> transaction
|
<command>BEGIN</command>/<command>COMMIT</command> transaction
|
||||||
@ -1043,12 +1043,12 @@ pg_listen <parameter>conn</parameter> <parameter>notifyName</parameter> <optiona
|
|||||||
message bearing the given name arrives from the server. This
|
message bearing the given name arrives from the server. This
|
||||||
occurs when any <productname>PostgreSQL</productname> client
|
occurs when any <productname>PostgreSQL</productname> client
|
||||||
application issues a
|
application issues a
|
||||||
<command>NOTIFY</command><indexterm><primary>NOTIFY</><secondary>in
|
<command>NOTIFY</command><indexterm><primary>NOTIFY</><secondary
|
||||||
pgtcl</></> command referencing that name. The command string is
|
sortas="pgtcl">in pgtcl</></> command referencing that name. The
|
||||||
executed from the Tcl idle loop. That is the normal idle state of
|
command string is executed from the Tcl idle loop. That is the
|
||||||
an application written with Tk. In non-Tk Tcl shells, you can
|
normal idle state of an application written with Tk. In non-Tk Tcl
|
||||||
execute <function>update</function> or <function>vwait</function>
|
shells, you can execute <function>update</function> or
|
||||||
to cause the idle loop to be entered.
|
<function>vwait</function> to cause the idle loop to be entered.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v 1.29 2003/06/21 21:51:33 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v 1.29.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="largeObjects">
|
<chapter id="largeObjects">
|
||||||
@ -113,6 +113,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v 1.29 2003/06/21 21:51:33 tgl Ex
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
Oid lo_creat(PGconn *conn, int mode);
|
Oid lo_creat(PGconn *conn, int mode);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
<indexterm><primary>lo_creat</></>
|
||||||
creates a new large object.
|
creates a new large object.
|
||||||
<replaceable class="parameter">mode</replaceable> is a bit mask
|
<replaceable class="parameter">mode</replaceable> is a bit mask
|
||||||
describing several different attributes of the new
|
describing several different attributes of the new
|
||||||
@ -143,7 +144,8 @@ inv_oid = lo_creat(INV_READ|INV_WRITE);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
Oid lo_import(PGconn *conn, const char *filename);
|
Oid lo_import(PGconn *conn, const char *filename);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
<replaceable class="parameter">filename</replaceable>
|
<indexterm><primary>lo_import</></>
|
||||||
|
<replaceable class="parameter">filename</replaceable>
|
||||||
specifies the operating system name of
|
specifies the operating system name of
|
||||||
the file to be imported as a large object.
|
the file to be imported as a large object.
|
||||||
The return value is the OID that was assigned to the new large object.
|
The return value is the OID that was assigned to the new large object.
|
||||||
@ -159,6 +161,7 @@ Oid lo_import(PGconn *conn, const char *filename);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_export(PGconn *conn, Oid lobjId, const char *filename);
|
int lo_export(PGconn *conn, Oid lobjId, const char *filename);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
<indexterm><primary>lo_export</></>
|
||||||
The <parameter>lobjId</parameter> argument specifies the OID of the large
|
The <parameter>lobjId</parameter> argument specifies the OID of the large
|
||||||
object to export and the <parameter>filename</parameter> argument specifies
|
object to export and the <parameter>filename</parameter> argument specifies
|
||||||
the operating system name name of the file.
|
the operating system name name of the file.
|
||||||
@ -173,6 +176,7 @@ int lo_export(PGconn *conn, Oid lobjId, const char *filename);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_open(PGconn *conn, Oid lobjId, int mode);
|
int lo_open(PGconn *conn, Oid lobjId, int mode);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
<indexterm><primary>lo_open</></>
|
||||||
The <parameter>lobjId</parameter> argument specifies the OID of the large
|
The <parameter>lobjId</parameter> argument specifies the OID of the large
|
||||||
object to open. The <parameter>mode</parameter> bits control whether the
|
object to open. The <parameter>mode</parameter> bits control whether the
|
||||||
object is opened for reading (<symbol>INV_READ</>), writing (<symbol>INV_WRITE</symbol>), or
|
object is opened for reading (<symbol>INV_READ</>), writing (<symbol>INV_WRITE</symbol>), or
|
||||||
@ -194,10 +198,13 @@ int lo_open(PGconn *conn, Oid lobjId, int mode);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_write(PGconn *conn, int fd, const char *buf, size_t len);
|
int lo_write(PGconn *conn, int fd, const char *buf, size_t len);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
writes <parameter>len</parameter> bytes from <parameter>buf</parameter> to large object <parameter>fd</>. The <parameter>fd</parameter>
|
<indexterm><primary>lo_write</></> writes
|
||||||
argument must have been returned by a previous <function>lo_open</function>.
|
<parameter>len</parameter> bytes from <parameter>buf</parameter>
|
||||||
The number of bytes actually written is returned. In
|
to large object <parameter>fd</>. The <parameter>fd</parameter>
|
||||||
the event of an error, the return value is negative.
|
argument must have been returned by a previous
|
||||||
|
<function>lo_open</function>. The number of bytes actually
|
||||||
|
written is returned. In the event of an error, the return value
|
||||||
|
is negative.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -209,10 +216,13 @@ int lo_write(PGconn *conn, int fd, const char *buf, size_t len);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_read(PGconn *conn, int fd, char *buf, size_t len);
|
int lo_read(PGconn *conn, int fd, char *buf, size_t len);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
reads <parameter>len</parameter> bytes from large object <parameter>fd</parameter> into <parameter>buf</parameter>. The <parameter>fd</parameter>
|
<indexterm><primary>lo_read</></> reads
|
||||||
argument must have been returned by a previous <function>lo_open</function>.
|
<parameter>len</parameter> bytes from large object
|
||||||
The number of bytes actually read is returned. In
|
<parameter>fd</parameter> into <parameter>buf</parameter>. The
|
||||||
the event of an error, the return value is negative.
|
<parameter>fd</parameter> argument must have been returned by a
|
||||||
|
previous <function>lo_open</function>. The number of bytes
|
||||||
|
actually read is returned. In the event of an error, the return
|
||||||
|
value is negative.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -225,10 +235,14 @@ int lo_read(PGconn *conn, int fd, char *buf, size_t len);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_lseek(PGconn *conn, int fd, int offset, int whence);
|
int lo_lseek(PGconn *conn, int fd, int offset, int whence);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
This function moves the current location pointer for the
|
<indexterm><primary>lo_lseek</></> This function moves the
|
||||||
large object described by <parameter>fd</> to the new location specified
|
current location pointer for the large object described by
|
||||||
by <parameter>offset</>. The valid values for <parameter>whence</> are
|
<parameter>fd</> to the new location specified by
|
||||||
<symbol>SEEK_SET</> (seek from object start), <symbol>SEEK_CUR</> (seek from current position), and <symbol>SEEK_END</> (seek from object end). The return value is the new location pointer.
|
<parameter>offset</>. The valid values for <parameter>whence</>
|
||||||
|
are <symbol>SEEK_SET</> (seek from object start),
|
||||||
|
<symbol>SEEK_CUR</> (seek from current position), and
|
||||||
|
<symbol>SEEK_END</> (seek from object end). The return value is
|
||||||
|
the new location pointer.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -241,7 +255,8 @@ int lo_lseek(PGconn *conn, int fd, int offset, int whence);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_tell(PGconn *conn, int fd);
|
int lo_tell(PGconn *conn, int fd);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
If there is an error, the return value is negative.
|
<indexterm><primary>lo_tell</></> If there is an error, the
|
||||||
|
return value is negative.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -253,9 +268,10 @@ int lo_tell(PGconn *conn, int fd);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_close(PGconn *conn, int fd);
|
int lo_close(PGconn *conn, int fd);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
where <parameter>fd</> is a large object descriptor returned by
|
<indexterm><primary>lo_close</></> where <parameter>fd</> is a
|
||||||
<function>lo_open</function>. On success, <function>lo_close</function>
|
large object descriptor returned by <function>lo_open</function>.
|
||||||
returns zero. On error, the return value is negative.
|
On success, <function>lo_close</function> returns zero. On
|
||||||
|
error, the return value is negative.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -272,8 +288,10 @@ int lo_close(PGconn *conn, int fd);
|
|||||||
<synopsis>
|
<synopsis>
|
||||||
int lo_unlink(PGconn *conn, Oid lobjId);
|
int lo_unlink(PGconn *conn, Oid lobjId);
|
||||||
</synopsis>
|
</synopsis>
|
||||||
The <parameter>lobjId</parameter> argument specifies the OID of the large
|
<indexterm><primary>lo_unlink</></> The
|
||||||
object to remove. In the event of an error, the return value is negative.
|
<parameter>lobjId</parameter> argument specifies the OID of the
|
||||||
|
large object to remove. In the event of an error, the return
|
||||||
|
value is negative.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -284,11 +302,13 @@ int lo_unlink(PGconn *conn, Oid lobjId);
|
|||||||
<title>Server-side Functions</title>
|
<title>Server-side Functions</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
There are two built-in server-side functions, <function>lo_import</function>
|
There are two built-in server-side functions,
|
||||||
and <function>lo_export</function>, for large object access, which are available for use
|
<function>lo_import</function><indexterm><primary>lo_import</></>
|
||||||
in <acronym>SQL</acronym>
|
and
|
||||||
commands.
|
<function>lo_export</function>,<indexterm><primary>lo_export</></>
|
||||||
Here is an example of their use:
|
for large object access, which are available for use in
|
||||||
|
<acronym>SQL</acronym> commands. Here is an example of their
|
||||||
|
use:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
CREATE TABLE image (
|
CREATE TABLE image (
|
||||||
name text,
|
name text,
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v 1.23 2003/06/18 12:19:11 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v 1.23.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="maintenance">
|
<chapter id="maintenance">
|
||||||
<title>Routine Database Maintenance Tasks</title>
|
<title>Routine Database Maintenance Tasks</title>
|
||||||
|
|
||||||
|
<indexterm zone="maintenance">
|
||||||
|
<primary>maintenance</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
There are a few routine maintenance chores that must be performed on
|
There are a few routine maintenance chores that must be performed on
|
||||||
a regular basis to keep a <productname>PostgreSQL</productname>
|
a regular basis to keep a <productname>PostgreSQL</productname>
|
||||||
@ -158,6 +162,15 @@ $Header: /cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v 1.23 2003/06/18 12:19:11
|
|||||||
<sect2 id="vacuum-for-statistics">
|
<sect2 id="vacuum-for-statistics">
|
||||||
<title>Updating planner statistics</title>
|
<title>Updating planner statistics</title>
|
||||||
|
|
||||||
|
<indexterm zone="vacuum-for-statistics">
|
||||||
|
<primary>statistics</primary>
|
||||||
|
<secondary>of the planner</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="vacuum-for-statistics">
|
||||||
|
<primary>ANALYZE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <productname>PostgreSQL</productname> query planner relies on
|
The <productname>PostgreSQL</productname> query planner relies on
|
||||||
statistical information about the contents of tables in order to
|
statistical information about the contents of tables in order to
|
||||||
@ -396,7 +409,8 @@ VACUUM
|
|||||||
<title>Log File Maintenance</title>
|
<title>Log File Maintenance</title>
|
||||||
|
|
||||||
<indexterm zone="logfile-maintenance">
|
<indexterm zone="logfile-maintenance">
|
||||||
<primary>log files</primary>
|
<primary>server log</primary>
|
||||||
|
<secondary>log file maintenance</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.27 2003/03/25 16:15:37 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.27.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="managing-databases">
|
<chapter id="managing-databases">
|
||||||
@ -19,6 +19,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.27 2003/03/25 16:15:37 p
|
|||||||
<sect1 id="manage-ag-overview">
|
<sect1 id="manage-ag-overview">
|
||||||
<title>Overview</title>
|
<title>Overview</title>
|
||||||
|
|
||||||
|
<indexterm zone="manage-ag-overview">
|
||||||
|
<primary>schema</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A database is a named collection of <acronym>SQL</acronym> objects
|
A database is a named collection of <acronym>SQL</acronym> objects
|
||||||
(<quote>database objects</quote>). Generally, every database
|
(<quote>database objects</quote>). Generally, every database
|
||||||
@ -70,8 +74,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.27 2003/03/25 16:15:37 p
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Databases are created with the SQL command
|
Databases are created with the SQL command <command>CREATE
|
||||||
<command>CREATE DATABASE</command>:
|
DATABASE</command>:<indexterm><primary>CREATE DATABASE</></>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE DATABASE <replaceable>name</>;
|
CREATE DATABASE <replaceable>name</>;
|
||||||
</synopsis>
|
</synopsis>
|
||||||
@ -93,9 +97,10 @@ CREATE DATABASE <replaceable>name</>;
|
|||||||
question remains how the <emphasis>first</> database at any given
|
question remains how the <emphasis>first</> database at any given
|
||||||
site can be created. The first database is always created by the
|
site can be created. The first database is always created by the
|
||||||
<command>initdb</> command when the data storage area is
|
<command>initdb</> command when the data storage area is
|
||||||
initialized. (See <xref linkend="creating-cluster">.)
|
initialized. (See <xref linkend="creating-cluster">.) This
|
||||||
This database is called <literal>template1</>. So to create the
|
database is called
|
||||||
first <quote>real</> database you can connect to
|
<literal>template1</>.<indexterm><primary>template1</></> So to
|
||||||
|
create the first <quote>real</> database you can connect to
|
||||||
<literal>template1</>.
|
<literal>template1</>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -112,7 +117,7 @@ CREATE DATABASE <replaceable>name</>;
|
|||||||
<para>
|
<para>
|
||||||
As an extra convenience, there is also a program that you can
|
As an extra convenience, there is also a program that you can
|
||||||
execute from the shell to create new databases,
|
execute from the shell to create new databases,
|
||||||
<command>createdb</>.
|
<command>createdb</>.<indexterm><primary>createdb</></>
|
||||||
|
|
||||||
<synopsis>
|
<synopsis>
|
||||||
createdb <replaceable class="parameter">dbname</replaceable>
|
createdb <replaceable class="parameter">dbname</replaceable>
|
||||||
@ -157,31 +162,33 @@ createdb -O <replaceable>username</> <replaceable>dbname</>
|
|||||||
<para>
|
<para>
|
||||||
<command>CREATE DATABASE</> actually works by copying an existing
|
<command>CREATE DATABASE</> actually works by copying an existing
|
||||||
database. By default, it copies the standard system database named
|
database. By default, it copies the standard system database named
|
||||||
<literal>template1</>. Thus that database is the <quote>template</>
|
<literal>template1</>.<indexterm><primary>template1</></> Thus that
|
||||||
from which new databases are made. If you add objects to
|
database is the <quote>template</> from which new databases are
|
||||||
<literal>template1</>, these objects
|
made. If you add objects to <literal>template1</>, these objects
|
||||||
will be copied into subsequently created user databases. This
|
will be copied into subsequently created user databases. This
|
||||||
behavior allows site-local modifications to the standard set of
|
behavior allows site-local modifications to the standard set of
|
||||||
objects in databases. For example, if you install the procedural
|
objects in databases. For example, if you install the procedural
|
||||||
language <application>PL/pgSQL</> in <literal>template1</>, it will
|
language <application>PL/pgSQL</> in <literal>template1</>, it will
|
||||||
automatically be available in user databases without any extra action
|
automatically be available in user databases without any extra
|
||||||
being taken when those databases are made.
|
action being taken when those databases are made.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
There is a second standard system database named <literal>template0</>.
|
There is a second standard system database named
|
||||||
This database contains the same data as the initial contents of
|
<literal>template0</>.<indexterm><primary>template0</></> This
|
||||||
<literal>template1</>, that is, only the standard objects predefined by
|
database contains the same data as the initial contents of
|
||||||
your version of <productname>PostgreSQL</productname>.
|
<literal>template1</>, that is, only the standard objects
|
||||||
<literal>template0</> should never be changed
|
predefined by your version of
|
||||||
after <command>initdb</>. By instructing <command>CREATE DATABASE</> to
|
<productname>PostgreSQL</productname>. <literal>template0</>
|
||||||
copy <literal>template0</> instead of <literal>template1</>, you can
|
should never be changed after <command>initdb</>. By instructing
|
||||||
create a <quote>virgin</> user database that contains none of the
|
<command>CREATE DATABASE</> to copy <literal>template0</> instead
|
||||||
site-local additions in <literal>template1</>. This is particularly
|
of <literal>template1</>, you can create a <quote>virgin</> user
|
||||||
handy when restoring a <literal>pg_dump</> dump: the dump script should
|
database that contains none of the site-local additions in
|
||||||
be restored in a virgin database to ensure that one recreates the
|
<literal>template1</>. This is particularly handy when restoring a
|
||||||
correct contents of the dumped database, without any conflicts with
|
<literal>pg_dump</> dump: the dump script should be restored in a
|
||||||
additions that may now be present in <literal>template1</>.
|
virgin database to ensure that one recreates the correct contents
|
||||||
|
of the dumped database, without any conflicts with additions that
|
||||||
|
may now be present in <literal>template1</>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -214,7 +221,7 @@ createdb -T template0 <replaceable>dbname</>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Two useful flags exist in <literal>pg_database</literal> for each
|
Two useful flags exist in <literal>pg_database</literal><indexterm><primary>pg_database</></> for each
|
||||||
database: the columns <literal>datistemplate</literal> and
|
database: the columns <literal>datistemplate</literal> and
|
||||||
<literal>datallowconn</literal>. <literal>datistemplate</literal>
|
<literal>datallowconn</literal>. <literal>datistemplate</literal>
|
||||||
may be set to indicate that a database is intended as a template for
|
may be set to indicate that a database is intended as a template for
|
||||||
@ -382,7 +389,8 @@ gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all
|
|||||||
<title>Destroying a Database</title>
|
<title>Destroying a Database</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Databases are destroyed with the command <command>DROP DATABASE</command>:
|
Databases are destroyed with the command <command>DROP
|
||||||
|
DATABASE</command>:<indexterm><primary>DROP DATABASE</></>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
DROP DATABASE <replaceable>name</>;
|
DROP DATABASE <replaceable>name</>;
|
||||||
</synopsis>
|
</synopsis>
|
||||||
@ -403,7 +411,8 @@ DROP DATABASE <replaceable>name</>;
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
For convenience, there is also a shell program to drop databases:
|
For convenience, there is also a shell program to drop
|
||||||
|
databases:<indexterm><primary>dropdb</></>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
dropdb <replaceable class="parameter">dbname</replaceable>
|
dropdb <replaceable class="parameter">dbname</replaceable>
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
@ -1,10 +1,20 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/monitoring.sgml,v 1.20 2003/04/04 03:03:53 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/monitoring.sgml,v 1.20.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="monitoring">
|
<chapter id="monitoring">
|
||||||
<title>Monitoring Database Activity</title>
|
<title>Monitoring Database Activity</title>
|
||||||
|
|
||||||
|
<indexterm zone="monitoring">
|
||||||
|
<primary>monitoring</primary>
|
||||||
|
<secondary>database activity</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="monitoring">
|
||||||
|
<primary>database activity</primary>
|
||||||
|
<secondary>monitoring</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A database administrator frequently wonders, <quote>What is the system
|
A database administrator frequently wonders, <quote>What is the system
|
||||||
doing right now?</quote>
|
doing right now?</quote>
|
||||||
@ -589,6 +599,11 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
|
|||||||
<sect1 id="monitoring-locks">
|
<sect1 id="monitoring-locks">
|
||||||
<title>Viewing Locks</title>
|
<title>Viewing Locks</title>
|
||||||
|
|
||||||
|
<indexterm zone="monitoring-locks">
|
||||||
|
<primary>lock</primary>
|
||||||
|
<secondary>monitoring</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Another useful tool for monitoring database activity is the
|
Another useful tool for monitoring database activity is the
|
||||||
<literal>pg_locks</literal> system table. It allows the
|
<literal>pg_locks</literal> system table. It allows the
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35 2003/03/25 16:15:37 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="mvcc">
|
<chapter id="mvcc">
|
||||||
@ -22,6 +22,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35 2003/03/25 16:15:37 petere
|
|||||||
<sect1 id="mvcc-intro">
|
<sect1 id="mvcc-intro">
|
||||||
<title>Introduction</title>
|
<title>Introduction</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>MVCC</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Unlike traditional database systems which use locks for concurrency control,
|
Unlike traditional database systems which use locks for concurrency control,
|
||||||
<productname>PostgreSQL</productname>
|
<productname>PostgreSQL</productname>
|
||||||
@ -57,6 +61,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35 2003/03/25 16:15:37 petere
|
|||||||
<sect1 id="transaction-iso">
|
<sect1 id="transaction-iso">
|
||||||
<title>Transaction Isolation</title>
|
<title>Transaction Isolation</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>transaction isolation</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <acronym>SQL</acronym> standard defines four levels of
|
The <acronym>SQL</acronym> standard defines four levels of
|
||||||
transaction isolation in terms of three phenomena that must be
|
transaction isolation in terms of three phenomena that must be
|
||||||
@ -108,7 +116,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35 2003/03/25 16:15:37 petere
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>isolation levels</primary>
|
<primary>transaction isolation level</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
The four transaction isolation levels and the corresponding
|
The four transaction isolation levels and the corresponding
|
||||||
behaviors are described in <xref linkend="mvcc-isolevel-table">.
|
behaviors are described in <xref linkend="mvcc-isolevel-table">.
|
||||||
@ -206,7 +214,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.35 2003/03/25 16:15:37 petere
|
|||||||
<title>Read Committed Isolation Level</title>
|
<title>Read Committed Isolation Level</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>isolation levels</primary>
|
<primary>transaction isolation level</primary>
|
||||||
<secondary>read committed</secondary>
|
<secondary>read committed</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -292,7 +300,7 @@ COMMIT;
|
|||||||
<title>Serializable Isolation Level</title>
|
<title>Serializable Isolation Level</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>isolation levels</primary>
|
<primary>transaction isolation level</primary>
|
||||||
<secondary>serializable</secondary>
|
<secondary>serializable</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -376,7 +384,7 @@ ERROR: Can't serialize access due to concurrent update
|
|||||||
<title>Explicit Locking</title>
|
<title>Explicit Locking</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>locking</primary>
|
<primary>lock</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -394,6 +402,10 @@ ERROR: Can't serialize access due to concurrent update
|
|||||||
<sect2 id="locking-tables">
|
<sect2 id="locking-tables">
|
||||||
<title>Table-Level Locks</title>
|
<title>Table-Level Locks</title>
|
||||||
|
|
||||||
|
<indexterm zone="locking-tables">
|
||||||
|
<primary>LOCK</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The list below shows the available lock modes and the contexts in
|
The list below shows the available lock modes and the contexts in
|
||||||
which they are used automatically by
|
which they are used automatically by
|
||||||
@ -644,6 +656,10 @@ ERROR: Can't serialize access due to concurrent update
|
|||||||
<sect2 id="locking-deadlocks">
|
<sect2 id="locking-deadlocks">
|
||||||
<title>Deadlocks</title>
|
<title>Deadlocks</title>
|
||||||
|
|
||||||
|
<indexterm zone="locking-deadlocks">
|
||||||
|
<primary>deadlock</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The use of explicit locking can increase the likelyhood of
|
The use of explicit locking can increase the likelyhood of
|
||||||
<firstterm>deadlocks</>, wherein two (or more) transactions each
|
<firstterm>deadlocks</>, wherein two (or more) transactions each
|
||||||
@ -813,6 +829,11 @@ UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
|
|||||||
<sect1 id="locking-indexes">
|
<sect1 id="locking-indexes">
|
||||||
<title>Locking and Indexes</title>
|
<title>Locking and Indexes</title>
|
||||||
|
|
||||||
|
<indexterm zone="locking-indexes">
|
||||||
|
<primary>index</primary>
|
||||||
|
<secondary>locks</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Though <productname>PostgreSQL</productname>
|
Though <productname>PostgreSQL</productname>
|
||||||
provides nonblocking read/write access to table
|
provides nonblocking read/write access to table
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/perform.sgml,v 1.30 2003/06/25 02:07:33 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/perform.sgml,v 1.30.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="performance-tips">
|
<chapter id="performance-tips">
|
||||||
@ -15,6 +15,14 @@ $Header: /cvsroot/pgsql/doc/src/sgml/perform.sgml,v 1.30 2003/06/25 02:07:33 mom
|
|||||||
<sect1 id="using-explain">
|
<sect1 id="using-explain">
|
||||||
<title>Using <command>EXPLAIN</command></title>
|
<title>Using <command>EXPLAIN</command></title>
|
||||||
|
|
||||||
|
<indexterm zone="using-explain">
|
||||||
|
<primary>EXPLAIN</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="using-explain">
|
||||||
|
<primary>query plan</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<productname>PostgreSQL</productname> devises a <firstterm>query
|
<productname>PostgreSQL</productname> devises a <firstterm>query
|
||||||
plan</firstterm> for each query it is given. Choosing the right
|
plan</firstterm> for each query it is given. Choosing the right
|
||||||
@ -336,6 +344,11 @@ EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1
|
|||||||
<sect1 id="planner-stats">
|
<sect1 id="planner-stats">
|
||||||
<title>Statistics Used by the Planner</title>
|
<title>Statistics Used by the Planner</title>
|
||||||
|
|
||||||
|
<indexterm zone="planner-stats">
|
||||||
|
<primary>statistics</primary>
|
||||||
|
<secondary>of the planner</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
As we saw in the previous section, the query planner needs to estimate
|
As we saw in the previous section, the query planner needs to estimate
|
||||||
the number of rows retrieved by a query in order to make good choices
|
the number of rows retrieved by a query in order to make good choices
|
||||||
@ -381,6 +394,10 @@ SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 't
|
|||||||
since it does not read every row of the table.
|
since it does not read every row of the table.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>pg_statistic</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Most queries retrieve only a fraction of the rows in a table, due
|
Most queries retrieve only a fraction of the rows in a table, due
|
||||||
to having <literal>WHERE</> clauses that restrict the rows to be examined.
|
to having <literal>WHERE</> clauses that restrict the rows to be examined.
|
||||||
@ -393,6 +410,10 @@ SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 't
|
|||||||
and are always approximate even when freshly updated.
|
and are always approximate even when freshly updated.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>pg_stats</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Rather than look at <structname>pg_statistic</structname> directly,
|
Rather than look at <structname>pg_statistic</structname> directly,
|
||||||
it's better to look at its view <structname>pg_stats</structname>
|
it's better to look at its view <structname>pg_stats</structname>
|
||||||
@ -538,6 +559,11 @@ SELECT attname, n_distinct, most_common_vals FROM pg_stats WHERE tablename = 'ro
|
|||||||
<sect1 id="explicit-joins">
|
<sect1 id="explicit-joins">
|
||||||
<title>Controlling the Planner with Explicit <literal>JOIN</> Clauses</title>
|
<title>Controlling the Planner with Explicit <literal>JOIN</> Clauses</title>
|
||||||
|
|
||||||
|
<indexterm zone="explicit-joins">
|
||||||
|
<primary>join</primary>
|
||||||
|
<secondary>controlling the order</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
It is possible
|
It is possible
|
||||||
to control the query planner to some extent by using the explicit <literal>JOIN</>
|
to control the query planner to some extent by using the explicit <literal>JOIN</>
|
||||||
@ -700,6 +726,10 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
|
|||||||
<sect2 id="disable-autocommit">
|
<sect2 id="disable-autocommit">
|
||||||
<title>Disable Autocommit</title>
|
<title>Disable Autocommit</title>
|
||||||
|
|
||||||
|
<indexterm zone="disable-autocommit">
|
||||||
|
<primary>autocommit</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Turn off autocommit and just do one commit at
|
Turn off autocommit and just do one commit at
|
||||||
the end. (In plain SQL, this means issuing <command>BEGIN</command>
|
the end. (In plain SQL, this means issuing <command>BEGIN</command>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/plperl.sgml,v 2.19 2003/04/07 01:29:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/plperl.sgml,v 2.19.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="plperl">
|
<chapter id="plperl">
|
||||||
@ -73,11 +73,12 @@ CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS '
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If an SQL null value is passed to a function, the argument value
|
If an SQL null value<indexterm><primary>null value</><secondary
|
||||||
will appear as <quote>undefined</> in Perl. The above function
|
sortas="PL/Perl">in PL/Perl</></indexterm> is passed to a function,
|
||||||
definition will not behave very nicely with null inputs (in fact,
|
the argument value will appear as <quote>undefined</> in Perl. The
|
||||||
it will act as though they are zeroes). We could add
|
above function definition will not behave very nicely with null
|
||||||
<literal>STRICT</> to the function definition to make
|
inputs (in fact, it will act as though they are zeroes). We could
|
||||||
|
add <literal>STRICT</> to the function definition to make
|
||||||
<productname>PostgreSQL</productname> do something more reasonable:
|
<productname>PostgreSQL</productname> do something more reasonable:
|
||||||
if a null value is passed, the function will not be called at all,
|
if a null value is passed, the function will not be called at all,
|
||||||
but will just return a null result automatically. Alternatively,
|
but will just return a null result automatically. Alternatively,
|
||||||
@ -170,7 +171,7 @@ SELECT name, empcomp(employee) FROM employee;
|
|||||||
mirror sites</ulink>). This module makes available a
|
mirror sites</ulink>). This module makes available a
|
||||||
<acronym>DBI</>-compliant database-handle named
|
<acronym>DBI</>-compliant database-handle named
|
||||||
<varname>$pg_dbh</varname> that can be used to perform queries
|
<varname>$pg_dbh</varname> that can be used to perform queries
|
||||||
with normal <acronym>DBI</> syntax.
|
with normal <acronym>DBI</> syntax.<indexterm><primary>DBI</></indexterm>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -180,7 +181,7 @@ SELECT name, empcomp(employee) FROM employee;
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>elog</primary>
|
<primary>elog</primary>
|
||||||
<secondary>PL/Perl</secondary>
|
<secondary>in PL/Perl</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<term><function>elog</> <replaceable>level</replaceable>, <replaceable>msg</replaceable></term>
|
<term><function>elog</> <replaceable>level</replaceable>, <replaceable>msg</replaceable></term>
|
||||||
@ -202,6 +203,11 @@ SELECT name, empcomp(employee) FROM employee;
|
|||||||
<sect1 id="plperl-trusted">
|
<sect1 id="plperl-trusted">
|
||||||
<title>Trusted and Untrusted PL/Perl</title>
|
<title>Trusted and Untrusted PL/Perl</title>
|
||||||
|
|
||||||
|
<indexterm zone="plperl-trusted">
|
||||||
|
<primary>trusted</primary>
|
||||||
|
<secondary>PL/Perl</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Normally, PL/Perl is installed as a <quote>trusted</> programming
|
Normally, PL/Perl is installed as a <quote>trusted</> programming
|
||||||
language named <literal>plperl</>. In this setup, certain Perl
|
language named <literal>plperl</>. In this setup, certain Perl
|
||||||
@ -231,13 +237,14 @@ CREATE FUNCTION badfunc() RETURNS integer AS '
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
Sometimes it is desirable to write Perl functions that are not
|
Sometimes it is desirable to write Perl functions that are not
|
||||||
restricted. For example, one might want a Perl function that
|
restricted. For example, one might want a Perl function that sends
|
||||||
sends mail. To handle these cases, PL/Perl can also be installed
|
mail. To handle these cases, PL/Perl can also be installed as an
|
||||||
as an <quote>untrusted</> language (usually called
|
<quote>untrusted</> language (usually called
|
||||||
<application>PL/PerlU</application>). In this case the full Perl language is
|
<application>PL/PerlU</application><indexterm><primary>PL/PerlU</></indexterm>).
|
||||||
available. If the <command>createlang</command> program is used to
|
In this case the full Perl language is available. If the
|
||||||
install the language, the language name <literal>plperlu</literal>
|
<command>createlang</command> program is used to install the
|
||||||
will select the untrusted PL/Perl variant.
|
language, the language name <literal>plperlu</literal> will select
|
||||||
|
the untrusted PL/Perl variant.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -272,7 +279,9 @@ CREATE FUNCTION badfunc() RETURNS integer AS '
|
|||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
PL/Perl cannot be used to write trigger functions.
|
PL/Perl cannot be used to write trigger
|
||||||
|
functions.<indexterm><primary>trigger</><secondary>in
|
||||||
|
PL/Perl</></indexterm>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.20 2003/08/09 22:50:22 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.20.2.1 2003/09/07 04:36:42 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="plpgsql">
|
<chapter id="plpgsql">
|
||||||
@ -63,20 +63,22 @@ $Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.20 2003/08/09 22:50:22 tgl
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
As each expression and <acronym>SQL</acronym> command is first used
|
As each expression and <acronym>SQL</acronym> command is first
|
||||||
in the function, the <application>PL/pgSQL</> interpreter creates
|
used in the function, the <application>PL/pgSQL</> interpreter
|
||||||
a prepared execution plan (using the <acronym>SPI</acronym>
|
creates a prepared execution plan (using the
|
||||||
manager's <function>SPI_prepare</function> and
|
<acronym>SPI</acronym> manager's <function>SPI_prepare</function>
|
||||||
<function>SPI_saveplan</function> functions). Subsequent visits
|
and <function>SPI_saveplan</function>
|
||||||
to that expression or command reuse the prepared plan. Thus, a
|
functions).<indexterm><primary>preparing a query</><secondary>in
|
||||||
function with conditional code that contains many statements for
|
PL/pgSQL</></> Subsequent visits to that expression or command
|
||||||
which execution plans might be required will only prepare and save
|
reuse the prepared plan. Thus, a function with conditional code
|
||||||
those plans that are really used during the lifetime of the
|
that contains many statements for which execution plans might be
|
||||||
database connection. This can substantially reduce the total
|
required will only prepare and save those plans that are really
|
||||||
amount of time required to parse, and generate execution plans for the
|
used during the lifetime of the database connection. This can
|
||||||
statements in a <application>PL/pgSQL</> function. A disadvantage is
|
substantially reduce the total amount of time required to parse,
|
||||||
that errors in a specific expression or command may not be detected
|
and generate execution plans for the statements in a
|
||||||
until that part of the function is reached in execution.
|
<application>PL/pgSQL</> function. A disadvantage is that errors
|
||||||
|
in a specific expression or command may not be detected until that
|
||||||
|
part of the function is reached in execution.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -196,7 +198,7 @@ END;
|
|||||||
and return the <quote>polymorphic</> types
|
and return the <quote>polymorphic</> types
|
||||||
<type>anyelement</type> and <type>anyarray</type>. The actual
|
<type>anyelement</type> and <type>anyarray</type>. The actual
|
||||||
datatypes handled by a polymorphic function can vary from call to
|
datatypes handled by a polymorphic function can vary from call to
|
||||||
call, as discussed in <xref linkend="types-polymorphic">.
|
call, as discussed in <xref linkend="extend-types-polymorphic">.
|
||||||
An example is shown in <xref linkend="plpgsql-declaration-aliases">.
|
An example is shown in <xref linkend="plpgsql-declaration-aliases">.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -563,7 +565,7 @@ END;
|
|||||||
or <type>anyarray</type>), a special parameter <literal>$0</literal>
|
or <type>anyarray</type>), a special parameter <literal>$0</literal>
|
||||||
is created. Its datatype is the actual return type of the function,
|
is created. Its datatype is the actual return type of the function,
|
||||||
as deduced from the actual input types (see <xref
|
as deduced from the actual input types (see <xref
|
||||||
linkend="types-polymorphic">).
|
linkend="extend-types-polymorphic">).
|
||||||
This allows the function to access its actual return type
|
This allows the function to access its actual return type
|
||||||
as shown in <xref linkend="plpgsql-declaration-type">.
|
as shown in <xref linkend="plpgsql-declaration-type">.
|
||||||
<literal>$0</literal> is initialized to NULL and can be modified by
|
<literal>$0</literal> is initialized to NULL and can be modified by
|
||||||
@ -903,6 +905,11 @@ tax := subtotal * 0.06;
|
|||||||
<sect2 id="plpgsql-select-into">
|
<sect2 id="plpgsql-select-into">
|
||||||
<title><command>SELECT INTO</command></title>
|
<title><command>SELECT INTO</command></title>
|
||||||
|
|
||||||
|
<indexterm zone="plpgsql-select-into">
|
||||||
|
<primary>SELECT INTO</primary>
|
||||||
|
<secondary>in PL/pgSQL</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The result of a <command>SELECT</command> command yielding multiple columns (but
|
The result of a <command>SELECT</command> command yielding multiple columns (but
|
||||||
only one row) can be assigned to a record variable, row-type
|
only one row) can be assigned to a record variable, row-type
|
||||||
@ -1097,14 +1104,16 @@ EXECUTE ''UPDATE tbl SET ''
|
|||||||
<para>
|
<para>
|
||||||
This example shows use of the functions
|
This example shows use of the functions
|
||||||
<function>quote_ident(<type>text</type>)</function> and
|
<function>quote_ident(<type>text</type>)</function> and
|
||||||
<function>quote_literal(<type>text</type>)</function>.
|
<function>quote_literal(<type>text</type>)</function>.<indexterm><primary>quote_ident</><secondary>use
|
||||||
Variables containing column and table identifiers should be
|
in
|
||||||
passed to function <function>quote_ident</function>.
|
PL/pgSQL</></indexterm><indexterm><primary>quote_literal</><secondary>use
|
||||||
Variables containing values that should be literal strings in the
|
in PL/pgSQL</></indexterm> Variables containing column and table
|
||||||
constructed command should be passed to
|
identifiers should be passed to function
|
||||||
<function>quote_literal</function>. Both take the
|
<function>quote_ident</function>. Variables containing values
|
||||||
appropriate steps to return the input text enclosed in double
|
that should be literal strings in the constructed command should
|
||||||
or single quotes respectively, with any embedded special characters
|
be passed to <function>quote_literal</function>. Both take the
|
||||||
|
appropriate steps to return the input text enclosed in double or
|
||||||
|
single quotes respectively, with any embedded special characters
|
||||||
properly escaped.
|
properly escaped.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -1517,6 +1526,11 @@ END IF;
|
|||||||
<sect2 id="plpgsql-control-structures-loops">
|
<sect2 id="plpgsql-control-structures-loops">
|
||||||
<title>Simple Loops</title>
|
<title>Simple Loops</title>
|
||||||
|
|
||||||
|
<indexterm zone="plpgsql-control-structures-loops">
|
||||||
|
<primary>loop</primary>
|
||||||
|
<secondary>in PL/pgSQL</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
With the <literal>LOOP</>, <literal>EXIT</>, <literal>WHILE</>,
|
With the <literal>LOOP</>, <literal>EXIT</>, <literal>WHILE</>,
|
||||||
and <literal>FOR</> statements, you can arrange for your
|
and <literal>FOR</> statements, you can arrange for your
|
||||||
@ -1655,6 +1669,11 @@ FOR i IN REVERSE 10..1 LOOP
|
|||||||
END LOOP;
|
END LOOP;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the lower bound is greater than the upper bound, the loop body is not
|
||||||
|
executed at all, but no error is raised.
|
||||||
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
@ -1734,6 +1753,11 @@ END LOOP;
|
|||||||
<sect1 id="plpgsql-cursors">
|
<sect1 id="plpgsql-cursors">
|
||||||
<title>Cursors</title>
|
<title>Cursors</title>
|
||||||
|
|
||||||
|
<indexterm zone="plpgsql-cursors">
|
||||||
|
<primary>cursor</primary>
|
||||||
|
<secondary>in PL/pgSQL</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Rather than executing a whole query at once, it is possible to set
|
Rather than executing a whole query at once, it is possible to set
|
||||||
up a <firstterm>cursor</> that encapsulates the query, and then read
|
up a <firstterm>cursor</> that encapsulates the query, and then read
|
||||||
@ -2096,6 +2120,11 @@ RAISE EXCEPTION ''Inexistent ID --> %'', user_id;
|
|||||||
<sect1 id="plpgsql-trigger">
|
<sect1 id="plpgsql-trigger">
|
||||||
<title>Trigger Procedures</title>
|
<title>Trigger Procedures</title>
|
||||||
|
|
||||||
|
<indexterm zone="plpgsql-trigger">
|
||||||
|
<primary>trigger</primary>
|
||||||
|
<secondary>in PL/pgSQL</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<application>PL/pgSQL</application> can be used to define trigger
|
<application>PL/pgSQL</application> can be used to define trigger
|
||||||
procedures. A trigger procedure is created with the
|
procedures. A trigger procedure is created with the
|
||||||
@ -2302,10 +2331,12 @@ CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
|
|||||||
|
|
||||||
<indexterm zone="plpgsql-porting">
|
<indexterm zone="plpgsql-porting">
|
||||||
<primary>Oracle</primary>
|
<primary>Oracle</primary>
|
||||||
|
<secondary>porting from PL/SQL to PL/pgSQL</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm zone="plpgsql-porting">
|
<indexterm zone="plpgsql-porting">
|
||||||
<primary>PL/SQL</primary>
|
<primary>PL/SQL (Oracle)</primary>
|
||||||
|
<secondary>porting to PL/pgSQL</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -2546,7 +2577,8 @@ END;
|
|||||||
with <literal>OUT</> parameters and string manipulation.
|
with <literal>OUT</> parameters and string manipulation.
|
||||||
<productname>PostgreSQL</> does not have an
|
<productname>PostgreSQL</> does not have an
|
||||||
<function>instr</function> function, but you can work around it
|
<function>instr</function> function, but you can work around it
|
||||||
using a combination of other functions. In <xref
|
using a combination of other
|
||||||
|
functions.<indexterm><primary>instr</></indexterm> In <xref
|
||||||
linkend="plpgsql-porting-appendix"> there is a
|
linkend="plpgsql-porting-appendix"> there is a
|
||||||
<application>PL/pgSQL</application> implementation of
|
<application>PL/pgSQL</application> implementation of
|
||||||
<function>instr</function> that you can use to make your porting
|
<function>instr</function> that you can use to make your porting
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/plpython.sgml,v 1.18 2003/07/01 13:52:29 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/plpython.sgml,v 1.18.2.1 2003/09/07 04:36:43 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="plpython">
|
<chapter id="plpython">
|
||||||
<title>PL/Python - Python Procedural Language</title>
|
<title>PL/Python - Python Procedural Language</title>
|
||||||
@ -68,9 +68,10 @@ def __plpython_procedure_myfunc_23456():
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
If you do not provide a return value, Python returns the default
|
If you do not provide a return value, Python returns the default
|
||||||
<symbol>None</symbol>. The
|
<symbol>None</symbol>. The language module translates Python's
|
||||||
language module translates Python's <symbol>None</symbol> into the
|
<symbol>None</symbol> into the SQL null
|
||||||
SQL null value.
|
value.<indexterm><primary>null value</><secondary
|
||||||
|
sortas="PL/Python">in PL/Python</></indexterm>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -87,7 +88,9 @@ def __plpython_procedure_myfunc_23456():
|
|||||||
The global dictionary <varname>SD</varname> is available to store
|
The global dictionary <varname>SD</varname> is available to store
|
||||||
data between function calls. This variable is private static data.
|
data between function calls. This variable is private static data.
|
||||||
The global dictionary <varname>GD</varname> is public data,
|
The global dictionary <varname>GD</varname> is public data,
|
||||||
available to all Python functions within a session. Use with care.
|
available to all Python functions within a session. Use with
|
||||||
|
care.<indexterm><primary>global data</><secondary>in
|
||||||
|
PL/Python</></indexterm>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -102,6 +105,11 @@ def __plpython_procedure_myfunc_23456():
|
|||||||
<sect1 id="plpython-trigger">
|
<sect1 id="plpython-trigger">
|
||||||
<title>Trigger Functions</title>
|
<title>Trigger Functions</title>
|
||||||
|
|
||||||
|
<indexterm zone="plpython-trigger">
|
||||||
|
<primary>trigger</primary>
|
||||||
|
<secondary>in PL/Python</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When a function is used in a trigger, the dictionary
|
When a function is used in a trigger, the dictionary
|
||||||
<literal>TD</literal> contains trigger-related values. The trigger
|
<literal>TD</literal> contains trigger-related values. The trigger
|
||||||
@ -146,7 +154,8 @@ def __plpython_procedure_myfunc_23456():
|
|||||||
<literal>plpy.error("msg")</literal>, and
|
<literal>plpy.error("msg")</literal>, and
|
||||||
<literal>plpy.fatal("msg")</literal>. They are mostly equivalent
|
<literal>plpy.fatal("msg")</literal>. They are mostly equivalent
|
||||||
to calling <literal>elog(<replaceable>LEVEL</>, "msg")</literal>
|
to calling <literal>elog(<replaceable>LEVEL</>, "msg")</literal>
|
||||||
from C code. <function>plpy.error</function> and
|
from C code.<indexterm><primary>elog</><secondary>in
|
||||||
|
PL/Python</></indexterm> <function>plpy.error</function> and
|
||||||
<function>plpy.fatal</function> actually raise a Python exception
|
<function>plpy.fatal</function> actually raise a Python exception
|
||||||
which, if uncaught, causes the PL/Python module to call
|
which, if uncaught, causes the PL/Python module to call
|
||||||
<literal>elog(ERROR, msg)</literal> when the function handler
|
<literal>elog(ERROR, msg)</literal> when the function handler
|
||||||
@ -187,10 +196,11 @@ foo = rv[i]["my_column"]
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The second function, <function>plpy.prepare</function>, prepares the
|
<indexterm><primary>preparing a query</><secondary>in PL/Python</></indexterm>
|
||||||
execution plan for a query. It is called with a query string and a
|
The second function, <function>plpy.prepare</function>, prepares
|
||||||
list of parameter types, if you have parameter references in the
|
the execution plan for a query. It is called with a query string
|
||||||
query. For example:
|
and a list of parameter types, if you have parameter references in
|
||||||
|
the query. For example:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
|
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
|
||||||
</programlisting>
|
</programlisting>
|
||||||
@ -235,7 +245,8 @@ CREATE FUNCTION usesavedplan() RETURNS trigger AS '
|
|||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<!-- NOT CURRENTLY SUPPORTED
|
<![IGNORE[
|
||||||
|
<!-- NOT CURRENTLY SUPPORTED -->
|
||||||
|
|
||||||
<sect1 id="plpython-trusted">
|
<sect1 id="plpython-trusted">
|
||||||
<title>Restricted Environment</title>
|
<title>Restricted Environment</title>
|
||||||
@ -259,6 +270,6 @@ CREATE FUNCTION usesavedplan() RETURNS trigger AS '
|
|||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
-->
|
]]>
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.24 2003/06/22 16:17:00 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.24.2.1 2003/09/07 04:36:43 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="pltcl">
|
<chapter id="pltcl">
|
||||||
@ -190,6 +190,11 @@ CREATE FUNCTION overpaid(employee) RETURNS boolean AS '
|
|||||||
<sect1 id="pltcl-global">
|
<sect1 id="pltcl-global">
|
||||||
<title>Global Data in PL/Tcl</title>
|
<title>Global Data in PL/Tcl</title>
|
||||||
|
|
||||||
|
<indexterm zone="pltcl-global">
|
||||||
|
<primary>global data</primary>
|
||||||
|
<secondary>in PL/Tcl</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Sometimes it
|
Sometimes it
|
||||||
is useful to have some global data that is held between two
|
is useful to have some global data that is held between two
|
||||||
@ -298,8 +303,10 @@ spi_exec -array C "SELECT * FROM pg_class" {
|
|||||||
<term><function>spi_prepare</function> <replaceable>query</replaceable> <replaceable>typelist</replaceable></term>
|
<term><function>spi_prepare</function> <replaceable>query</replaceable> <replaceable>typelist</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Prepares and saves a query plan for later execution. The saved plan
|
Prepares and saves a query plan for later execution. The
|
||||||
will be retained for the life of the current session.
|
saved plan will be retained for the life of the current
|
||||||
|
session.<indexterm><primary>preparing a query</><secondary>in
|
||||||
|
PL/Tcl</></>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The query may use parameters, that is, placeholders for
|
The query may use parameters, that is, placeholders for
|
||||||
@ -437,7 +444,7 @@ SELECT 'doesn''t' AS ret
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>elog</primary>
|
<primary>elog</primary>
|
||||||
<secondary>PL/Tcl</secondary>
|
<secondary>in PL/Tcl</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<term><function>elog</> <replaceable>level</replaceable> <replaceable>msg</replaceable></term>
|
<term><function>elog</> <replaceable>level</replaceable> <replaceable>msg</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -466,7 +473,7 @@ SELECT 'doesn''t' AS ret
|
|||||||
<title>Trigger Procedures in PL/Tcl</title>
|
<title>Trigger Procedures in PL/Tcl</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>triggers</primary>
|
<primary>trigger</primary>
|
||||||
<secondary>in PL/Tcl</secondary>
|
<secondary>in PL/Tcl</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.53 2003/06/22 16:16:44 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.53.2.1 2003/09/07 04:36:43 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
||||||
@ -188,7 +188,6 @@ $Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.53 2003/06/22 16:16:44 tg
|
|||||||
&libpgtcl;
|
&libpgtcl;
|
||||||
&ecpg;
|
&ecpg;
|
||||||
&jdbc;
|
&jdbc;
|
||||||
&pygresql;
|
|
||||||
&infoschema;
|
&infoschema;
|
||||||
|
|
||||||
</part>
|
</part>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.41 2003/08/14 20:09:31 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.41.2.1 2003/09/07 04:36:43 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="protocol">
|
<chapter id="protocol">
|
||||||
<title>Frontend/Backend Protocol</title>
|
<title>Frontend/Backend Protocol</title>
|
||||||
@ -1005,9 +1005,9 @@
|
|||||||
ParameterStatus will be generated: they are
|
ParameterStatus will be generated: they are
|
||||||
<literal>server_version</> (a pseudo-parameter that cannot change after
|
<literal>server_version</> (a pseudo-parameter that cannot change after
|
||||||
startup);
|
startup);
|
||||||
<literal>server_encoding</> (also not presently changeable after start);
|
|
||||||
<literal>client_encoding</>,
|
<literal>client_encoding</>,
|
||||||
<literal>is_superuser</>, and
|
<literal>is_superuser</>,
|
||||||
|
<literal>session_authorization</literal>, and
|
||||||
<literal>DateStyle</>.
|
<literal>DateStyle</>.
|
||||||
This set might change in the future, or even become configurable.
|
This set might change in the future, or even become configurable.
|
||||||
Accordingly, a frontend should simply ignore ParameterStatus for
|
Accordingly, a frontend should simply ignore ParameterStatus for
|
||||||
|
@ -1,8 +1,16 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/queries.sgml,v 1.22 2003/08/14 23:13:27 tgl Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/queries.sgml,v 1.22.2.1 2003/09/07 04:36:43 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="queries">
|
<chapter id="queries">
|
||||||
<title>Queries</title>
|
<title>Queries</title>
|
||||||
|
|
||||||
|
<indexterm zone="queries">
|
||||||
|
<primary>query</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="queries">
|
||||||
|
<primary>SELECT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The previous chapters explained how to create tables, how to fill
|
The previous chapters explained how to create tables, how to fill
|
||||||
them with data, and how to manipulate that data. Now we finally
|
them with data, and how to manipulate that data. Now we finally
|
||||||
@ -73,6 +81,10 @@ SELECT random();
|
|||||||
<sect1 id="queries-table-expressions">
|
<sect1 id="queries-table-expressions">
|
||||||
<title>Table Expressions</title>
|
<title>Table Expressions</title>
|
||||||
|
|
||||||
|
<indexterm zone="queries-table-expressions">
|
||||||
|
<primary>table expression</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
A <firstterm>table expression</firstterm> computes a table. The
|
A <firstterm>table expression</firstterm> computes a table. The
|
||||||
table expression contains a <literal>FROM</> clause that is
|
table expression contains a <literal>FROM</> clause that is
|
||||||
@ -112,6 +124,10 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
overall table expression.
|
overall table expression.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>ONLY</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
When a table reference names a table that is the supertable of a
|
When a table reference names a table that is the supertable of a
|
||||||
table inheritance hierarchy, the table reference produces rows of
|
table inheritance hierarchy, the table reference produces rows of
|
||||||
@ -125,7 +141,7 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<title>Joined Tables</title>
|
<title>Joined Tables</title>
|
||||||
|
|
||||||
<indexterm zone="queries-join">
|
<indexterm zone="queries-join">
|
||||||
<primary>joins</primary>
|
<primary>join</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -141,10 +157,14 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<term>Cross join</term>
|
<term>Cross join</term>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>joins</primary>
|
<primary>join</primary>
|
||||||
<secondary>cross</secondary>
|
<secondary>cross</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>cross join</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
<replaceable>T1</replaceable> CROSS JOIN <replaceable>T2</replaceable>
|
<replaceable>T1</replaceable> CROSS JOIN <replaceable>T2</replaceable>
|
||||||
@ -175,10 +195,14 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<term>Qualified joins</term>
|
<term>Qualified joins</term>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>joins</primary>
|
<primary>join</primary>
|
||||||
<secondary>outer</secondary>
|
<secondary>outer</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>outer join</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
<replaceable>T1</replaceable> { <optional>INNER</optional> | { LEFT | RIGHT | FULL } <optional>OUTER</optional> } JOIN <replaceable>T2</replaceable> ON <replaceable>boolean_expression</replaceable>
|
<replaceable>T1</replaceable> { <optional>INNER</optional> | { LEFT | RIGHT | FULL } <optional>OUTER</optional> } JOIN <replaceable>T2</replaceable> ON <replaceable>boolean_expression</replaceable>
|
||||||
@ -227,9 +251,12 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>joins</primary>
|
<primary>join</primary>
|
||||||
<secondary>natural</secondary>
|
<secondary>natural</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
<indexterm>
|
||||||
|
<primary>natural join</primary>
|
||||||
|
</indexterm>
|
||||||
Finally, <literal>NATURAL</> is a shorthand form of
|
Finally, <literal>NATURAL</> is a shorthand form of
|
||||||
<literal>USING</>: it forms a <literal>USING</> list
|
<literal>USING</>: it forms a <literal>USING</> list
|
||||||
consisting of exactly those column names that appear in both
|
consisting of exactly those column names that appear in both
|
||||||
@ -256,10 +283,14 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<term><literal>LEFT OUTER JOIN</></term>
|
<term><literal>LEFT OUTER JOIN</></term>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>joins</primary>
|
<primary>join</primary>
|
||||||
<secondary>left</secondary>
|
<secondary>left</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>left join</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
First, an inner join is performed. Then, for each row in
|
First, an inner join is performed. Then, for each row in
|
||||||
@ -274,6 +305,15 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><literal>RIGHT OUTER JOIN</></term>
|
<term><literal>RIGHT OUTER JOIN</></term>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>join</primary>
|
||||||
|
<secondary>right</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>right join</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
First, an inner join is performed. Then, for each row in
|
First, an inner join is performed. Then, for each row in
|
||||||
@ -424,13 +464,13 @@ FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_r
|
|||||||
<title>Table and Column Aliases</title>
|
<title>Table and Column Aliases</title>
|
||||||
|
|
||||||
<indexterm zone="queries-table-aliases">
|
<indexterm zone="queries-table-aliases">
|
||||||
<primary>label</primary>
|
<primary>alias</primary>
|
||||||
<secondary>table</secondary>
|
<secondary>in the FROM clause</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>alias</primary>
|
<primary>label</primary>
|
||||||
<see>label</see>
|
<see>alias</see>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -530,7 +570,7 @@ SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c
|
|||||||
<title>Subqueries</title>
|
<title>Subqueries</title>
|
||||||
|
|
||||||
<indexterm zone="queries-subqueries">
|
<indexterm zone="queries-subqueries">
|
||||||
<primary>subqueries</primary>
|
<primary>subquery</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -556,6 +596,11 @@ FROM (SELECT * FROM table1) AS alias_name
|
|||||||
|
|
||||||
<indexterm zone="queries-tablefunctions"><primary>table function</></>
|
<indexterm zone="queries-tablefunctions"><primary>table function</></>
|
||||||
|
|
||||||
|
<indexterm zone="queries-tablefunctions">
|
||||||
|
<primary>function</>
|
||||||
|
<secondary>in the FROM clause</>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Table functions are functions that produce a set of rows, made up
|
Table functions are functions that produce a set of rows, made up
|
||||||
of either base data types (scalar types) or composite data types
|
of either base data types (scalar types) or composite data types
|
||||||
@ -628,7 +673,7 @@ SELECT *
|
|||||||
<title>The WHERE Clause</title>
|
<title>The WHERE Clause</title>
|
||||||
|
|
||||||
<indexterm zone="queries-where">
|
<indexterm zone="queries-where">
|
||||||
<primary>where</primary>
|
<primary>WHERE</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -716,7 +761,11 @@ SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1)
|
|||||||
<title>The GROUP BY and HAVING Clauses</title>
|
<title>The GROUP BY and HAVING Clauses</title>
|
||||||
|
|
||||||
<indexterm zone="queries-group">
|
<indexterm zone="queries-group">
|
||||||
<primary>group</primary>
|
<primary>GROUP BY</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="queries-group">
|
||||||
|
<primary>grouping</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -827,6 +876,10 @@ SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
|
|||||||
column names is also allowed.
|
column names is also allowed.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>HAVING</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If a table has been grouped using a <literal>GROUP BY</literal>
|
If a table has been grouped using a <literal>GROUP BY</literal>
|
||||||
clause, but then only certain groups are of interest, the
|
clause, but then only certain groups are of interest, the
|
||||||
@ -884,7 +937,7 @@ SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS profit
|
|||||||
<title>Select Lists</title>
|
<title>Select Lists</title>
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>select</primary>
|
<primary>SELECT</primary>
|
||||||
<secondary>select list</secondary>
|
<secondary>select list</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
@ -901,6 +954,10 @@ SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS profit
|
|||||||
<sect2 id="queries-select-list-items">
|
<sect2 id="queries-select-list-items">
|
||||||
<title>Select-List Items</title>
|
<title>Select-List Items</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>*</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The simplest kind of select list is <literal>*</literal> which
|
The simplest kind of select list is <literal>*</literal> which
|
||||||
emits all columns that the table expression produces. Otherwise,
|
emits all columns that the table expression produces. Otherwise,
|
||||||
@ -944,8 +1001,8 @@ SELECT tbl1.a, tbl2.a, tbl1.b FROM ...
|
|||||||
<title>Column Labels</title>
|
<title>Column Labels</title>
|
||||||
|
|
||||||
<indexterm zone="queries-column-labels">
|
<indexterm zone="queries-column-labels">
|
||||||
<primary>label</primary>
|
<primary>alias</primary>
|
||||||
<secondary>column</secondary>
|
<secondary>in the select list</secondary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -981,7 +1038,11 @@ SELECT a AS value, b + c AS sum FROM ...
|
|||||||
<title>DISTINCT</title>
|
<title>DISTINCT</title>
|
||||||
|
|
||||||
<indexterm zone="queries-distinct">
|
<indexterm zone="queries-distinct">
|
||||||
<primary>distinct</primary>
|
<primary>DISTINCT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="queries-distinct">
|
||||||
|
<primary>duplicates</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -997,6 +1058,8 @@ SELECT DISTINCT <replaceable>select_list</replaceable> ...
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
<indexterm><primary>null value</><secondary sortas="DISTINCT">in
|
||||||
|
DISTINCT</></indexterm>
|
||||||
Obviously, two rows are considered distinct if they differ in at
|
Obviously, two rows are considered distinct if they differ in at
|
||||||
least one column value. Null values are considered equal in this
|
least one column value. Null values are considered equal in this
|
||||||
comparison.
|
comparison.
|
||||||
@ -1035,13 +1098,25 @@ SELECT DISTINCT ON (<replaceable>expression</replaceable> <optional>, <replaceab
|
|||||||
<title>Combining Queries</title>
|
<title>Combining Queries</title>
|
||||||
|
|
||||||
<indexterm zone="queries-union">
|
<indexterm zone="queries-union">
|
||||||
<primary>union</primary>
|
<primary>UNION</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm zone="queries-union">
|
<indexterm zone="queries-union">
|
||||||
<primary>intersection</primary>
|
<primary>INTERSECT</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm zone="queries-union">
|
<indexterm zone="queries-union">
|
||||||
<primary>except</primary>
|
<primary>EXCEPT</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="queries-union">
|
||||||
|
<primary>set union</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="queries-union">
|
||||||
|
<primary>set intersection</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="queries-union">
|
||||||
|
<primary>set difference</primary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm zone="queries-union">
|
||||||
|
<primary>set operation</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1104,7 +1179,10 @@ SELECT DISTINCT ON (<replaceable>expression</replaceable> <optional>, <replaceab
|
|||||||
|
|
||||||
<indexterm zone="queries-order">
|
<indexterm zone="queries-order">
|
||||||
<primary>sorting</primary>
|
<primary>sorting</primary>
|
||||||
<secondary>query results</secondary>
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="queries-order">
|
||||||
|
<primary>ORDER BY</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1173,12 +1251,11 @@ SELECT a AS b FROM table1 ORDER BY a;
|
|||||||
<title>LIMIT and OFFSET</title>
|
<title>LIMIT and OFFSET</title>
|
||||||
|
|
||||||
<indexterm zone="queries-limit">
|
<indexterm zone="queries-limit">
|
||||||
<primary>limit</primary>
|
<primary>LIMIT</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<indexterm zone="queries-limit">
|
<indexterm zone="queries-limit">
|
||||||
<primary>offset</primary>
|
<primary>OFFSET</primary>
|
||||||
<secondary>with query results</secondary>
|
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/query.sgml,v 1.32 2003/06/24 23:27:24 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/query.sgml,v 1.32.2.1 2003/09/07 04:36:43 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="tutorial-sql">
|
<chapter id="tutorial-sql">
|
||||||
@ -87,7 +87,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/query.sgml,v 1.32 2003/06/24 23:27:24 momji
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<indexterm><primary>cluster</primary></indexterm>
|
<indexterm><primary>database cluster</primary></indexterm>
|
||||||
|
<indexterm><primary>cluster</primary><secondary>of databases</secondary><see>database cluster</see></indexterm>
|
||||||
|
|
||||||
Tables are grouped into databases, and a collection of databases
|
Tables are grouped into databases, and a collection of databases
|
||||||
managed by a single <productname>PostgreSQL</productname> server
|
managed by a single <productname>PostgreSQL</productname> server
|
||||||
@ -562,7 +563,7 @@ SELECT *
|
|||||||
<title>Aggregate Functions</title>
|
<title>Aggregate Functions</title>
|
||||||
|
|
||||||
<indexterm zone="tutorial-agg">
|
<indexterm zone="tutorial-agg">
|
||||||
<primary>aggregate</primary>
|
<primary>aggregate function</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.13 2003/04/26 23:56:51 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.13.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>abort the current transaction</refpurpose>
|
<refpurpose>abort the current transaction</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-abort">
|
||||||
|
<primary>ABORT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ABORT [ WORK | TRANSACTION ]
|
ABORT [ WORK | TRANSACTION ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_aggregate.sgml,v 1.1 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_aggregate.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of an aggregate function</refpurpose>
|
<refpurpose>change the definition of an aggregate function</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alteraggregate">
|
||||||
|
<primary>ALTER AGGREGATE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>type</replaceable> ) RENAME TO <replaceable>newname</replaceable>
|
ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>type</replaceable> ) RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_conversion.sgml,v 1.1 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_conversion.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a conversion</refpurpose>
|
<refpurpose>change the definition of a conversion</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterconversion">
|
||||||
|
<primary>ALTER CONVERSION</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER CONVERSION <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
ALTER CONVERSION <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_database.sgml,v 1.7 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_database.sgml,v 1.7.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change a database</refpurpose>
|
<refpurpose>change a database</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterdatabase">
|
||||||
|
<primary>ALTER DATABASE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET <replaceable>variable</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
|
ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET <replaceable>variable</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_domain.sgml,v 1.7 2003/01/06 00:31:44 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_domain.sgml,v 1.7.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -8,6 +8,7 @@ PostgreSQL documentation
|
|||||||
<refentrytitle id="sql-alterdomain-title">ALTER DOMAIN</refentrytitle>
|
<refentrytitle id="sql-alterdomain-title">ALTER DOMAIN</refentrytitle>
|
||||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||||
</refmeta>
|
</refmeta>
|
||||||
|
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
<refname>
|
<refname>
|
||||||
ALTER DOMAIN
|
ALTER DOMAIN
|
||||||
@ -16,6 +17,11 @@ PostgreSQL documentation
|
|||||||
change the definition of a domain
|
change the definition of a domain
|
||||||
</refpurpose>
|
</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterdomain">
|
||||||
|
<primary>ALTER DOMAIN</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<refsynopsisdivinfo>
|
<refsynopsisdivinfo>
|
||||||
<date>2002-11-27</date>
|
<date>2002-11-27</date>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_function.sgml,v 1.1 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_function.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a function</refpurpose>
|
<refpurpose>change the definition of a function</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterfunction">
|
||||||
|
<primary>ALTER FUNCTION</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER FUNCTION <replaceable>name</replaceable> ( [ <replaceable class="parameter">type</replaceable> [, ...] ] ) RENAME TO <replaceable>newname</replaceable>
|
ALTER FUNCTION <replaceable>name</replaceable> ( [ <replaceable class="parameter">type</replaceable> [, ...] ] ) RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_group.sgml,v 1.10 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_group.sgml,v 1.10.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change a user group</refpurpose>
|
<refpurpose>change a user group</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-altergroup">
|
||||||
|
<primary>ALTER GROUP</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER GROUP <replaceable class="PARAMETER">groupname</replaceable> ADD USER <replaceable class="PARAMETER">username</replaceable> [, ... ]
|
ALTER GROUP <replaceable class="PARAMETER">groupname</replaceable> ADD USER <replaceable class="PARAMETER">username</replaceable> [, ... ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_language.sgml,v 1.1 2003/06/27 14:45:25 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_language.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a procedural language</refpurpose>
|
<refpurpose>change the definition of a procedural language</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterlanguage">
|
||||||
|
<primary>ALTER LANGUAGE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER LANGUAGE <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
ALTER LANGUAGE <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_opclass.sgml,v 1.1 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_opclass.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of an operator class</refpurpose>
|
<refpurpose>change the definition of an operator class</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alteropclass">
|
||||||
|
<primary>ALTER OPERATOR CLASS</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable> RENAME TO <replaceable>newname</replaceable>
|
ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable> RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_schema.sgml,v 1.1 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_schema.sgml,v 1.1.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a schema</refpurpose>
|
<refpurpose>change the definition of a schema</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alterschema">
|
||||||
|
<primary>ALTER SCHEMA</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER SCHEMA <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
ALTER SCHEMA <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_sequence.sgml,v 1.2 2003/06/12 07:49:43 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_sequence.sgml,v 1.2.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -8,6 +8,7 @@ PostgreSQL documentation
|
|||||||
<refentrytitle id="SQL-ALTERSEQUENCE-TITLE">ALTER SEQUENCE</refentrytitle>
|
<refentrytitle id="SQL-ALTERSEQUENCE-TITLE">ALTER SEQUENCE</refentrytitle>
|
||||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||||
</refmeta>
|
</refmeta>
|
||||||
|
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
<refname>
|
<refname>
|
||||||
ALTER SEQUENCE
|
ALTER SEQUENCE
|
||||||
@ -16,6 +17,11 @@ PostgreSQL documentation
|
|||||||
alter the definition of a sequence generator
|
alter the definition of a sequence generator
|
||||||
</refpurpose>
|
</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-altersequence">
|
||||||
|
<primary>ALTER SEQUENCE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<refsynopsisdivinfo>
|
<refsynopsisdivinfo>
|
||||||
<date>1999-07-20</date>
|
<date>1999-07-20</date>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.59 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.59.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a table</refpurpose>
|
<refpurpose>change the definition of a table</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-altertable">
|
||||||
|
<primary>ALTER TABLE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ * ]
|
ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ * ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_trigger.sgml,v 1.4 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_trigger.sgml,v 1.4.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change the definition of a trigger</refpurpose>
|
<refpurpose>change the definition of a trigger</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-altertrigger">
|
||||||
|
<primary>ALTER TRIGGER</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER TRIGGER <replaceable class="PARAMETER">trigger</replaceable> ON <replaceable class="PARAMETER">table</replaceable>
|
ALTER TRIGGER <replaceable class="PARAMETER">trigger</replaceable> ON <replaceable class="PARAMETER">table</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_user.sgml,v 1.28 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_user.sgml,v 1.28.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>change a database user account</refpurpose>
|
<refpurpose>change a database user account</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-alteruser">
|
||||||
|
<primary>ALTER USER</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ALTER USER <replaceable class="PARAMETER">username</replaceable> [ [ WITH ] <replaceable class="PARAMETER">option</replaceable> [ ... ] ]
|
ALTER USER <replaceable class="PARAMETER">username</replaceable> [ [ WITH ] <replaceable class="PARAMETER">option</replaceable> [ ... ] ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/analyze.sgml,v 1.12 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/analyze.sgml,v 1.12.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>collect statistics about a database</refpurpose>
|
<refpurpose>collect statistics about a database</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-analyze">
|
||||||
|
<primary>ANALYZE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
ANALYZE [ VERBOSE ] [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
|
ANALYZE [ VERBOSE ] [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/begin.sgml,v 1.24 2003/05/14 03:26:00 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/begin.sgml,v 1.24.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>start a transaction block</refpurpose>
|
<refpurpose>start a transaction block</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-begin">
|
||||||
|
<primary>BEGIN</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
BEGIN [ WORK | TRANSACTION ]
|
BEGIN [ WORK | TRANSACTION ]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/checkpoint.sgml,v 1.9 2003/04/15 13:25:08 petere Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/checkpoint.sgml,v 1.9.2.1 2003/09/07 04:36:44 momjian Exp $ -->
|
||||||
|
|
||||||
<refentry id="sql-checkpoint">
|
<refentry id="sql-checkpoint">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
@ -11,6 +11,10 @@
|
|||||||
<refpurpose>force a transaction log checkpoint</refpurpose>
|
<refpurpose>force a transaction log checkpoint</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-checkpoint">
|
||||||
|
<primary>CHECKPOINT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CHECKPOINT
|
CHECKPOINT
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/close.sgml,v 1.14 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/close.sgml,v 1.14.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>close a cursor</refpurpose>
|
<refpurpose>close a cursor</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-close">
|
||||||
|
<primary>CLOSE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CLOSE <replaceable class="PARAMETER">cursor</replaceable>
|
CLOSE <replaceable class="PARAMETER">cursor</replaceable>
|
||||||
@ -31,9 +35,13 @@ CLOSE <replaceable class="PARAMETER">cursor</replaceable>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Every open cursor is implicitly closed when a transaction is
|
Every non-holdable open cursor is implicitly closed when a
|
||||||
terminated by <command>COMMIT</command> or
|
transaction is terminated by <command>COMMIT</command> or
|
||||||
<command>ROLLBACK</command>.
|
<command>ROLLBACK</command>. Holdable cursors are implicitely
|
||||||
|
closed if the transaction that created them aborts via
|
||||||
|
<command>ROLLBACK</command>; if this does not happen, the holdable
|
||||||
|
cursor remains open until an explicit <command>CLOSE</command> is
|
||||||
|
executed, or the client disconnects.
|
||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
@ -66,10 +74,10 @@ CLOSE <replaceable class="PARAMETER">cursor</replaceable>
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><computeroutput>WARNING: PerformPortalClose: portal "<replaceable class="PARAMETER">cursor</replaceable>" not found</computeroutput></term>
|
<term><computeroutput>ERROR: cursor "<replaceable class="PARAMETER">cursor</replaceable>" does not exist</computeroutput></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
This warning is given if <replaceable
|
Message returned if <replaceable
|
||||||
class="PARAMETER">cursor</replaceable> is not declared or has
|
class="PARAMETER">cursor</replaceable> is not declared or has
|
||||||
already been closed.
|
already been closed.
|
||||||
</para>
|
</para>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/cluster.sgml,v 1.26 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/cluster.sgml,v 1.26.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>cluster a table according to an index</refpurpose>
|
<refpurpose>cluster a table according to an index</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-cluster">
|
||||||
|
<primary>CLUSTER</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON <replaceable class="PARAMETER">tablename</replaceable>
|
CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON <replaceable class="PARAMETER">tablename</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.10 2003/06/18 12:19:11 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.10.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -15,6 +15,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>cluster a <productname>PostgreSQL</productname> database</refpurpose>
|
<refpurpose>cluster a <productname>PostgreSQL</productname> database</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="app-clusterdb">
|
||||||
|
<primary>clusterdb</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>clusterdb</command>
|
<command>clusterdb</command>
|
||||||
@ -129,10 +133,9 @@ PostgreSQL documentation
|
|||||||
<term><option>--host <replaceable class="parameter">host</replaceable></></term>
|
<term><option>--host <replaceable class="parameter">host</replaceable></></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Specifies the host name of the machine on which the
|
Specifies the host name of the machine on which the server is
|
||||||
server
|
running. If the value begins with a slash, it is used as the
|
||||||
is running. If the value begins with a slash, it is used
|
directory for the Unix domain socket.
|
||||||
as the directory for the Unix domain socket.
|
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -182,7 +185,7 @@ PostgreSQL documentation
|
|||||||
<term><computeroutput>CLUSTER</computeroutput></term>
|
<term><computeroutput>CLUSTER</computeroutput></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Everything went well.
|
The database was successfully clustered.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/comment.sgml,v 1.21 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/comment.sgml,v 1.21.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define or change the comment of an object</refpurpose>
|
<refpurpose>define or change the comment of an object</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-comment">
|
||||||
|
<primary>COMMENT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
COMMENT ON
|
COMMENT ON
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/commit.sgml,v 1.15 2003/04/15 13:25:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/commit.sgml,v 1.15.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>commit the current transaction</refpurpose>
|
<refpurpose>commit the current transaction</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-commit">
|
||||||
|
<primary>COMMIT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
COMMIT [ WORK | TRANSACTION ]
|
COMMIT [ WORK | TRANSACTION ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/copy.sgml,v 1.46 2003/05/09 21:19:48 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/copy.sgml,v 1.46.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>copy data between files and tables</refpurpose>
|
<refpurpose>copy data between files and tables</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-copy">
|
||||||
|
<primary>COPY</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
COPY <replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column</replaceable> [, ...] ) ]
|
COPY <replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column</replaceable> [, ...] ) ]
|
||||||
@ -380,7 +384,7 @@ COPY <replaceable class="parameter">table</replaceable> [ ( <replaceable class="
|
|||||||
The file format used for <command>COPY BINARY</command> changed in
|
The file format used for <command>COPY BINARY</command> changed in
|
||||||
<application>PostgreSQL</application> 7.4. The new format consists
|
<application>PostgreSQL</application> 7.4. The new format consists
|
||||||
of a file header, zero or more tuples containing the row data, and
|
of a file header, zero or more tuples containing the row data, and
|
||||||
a file trailer.
|
a file trailer. Headers and data are now in network byte order.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<refsect3>
|
<refsect3>
|
||||||
@ -483,6 +487,15 @@ future extension may add a header field that allows per-column format codes
|
|||||||
to be specified.
|
to be specified.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To determine the appropriate binary format for the actual tuple data you
|
||||||
|
should consult the <application>PostgreSQL</application> source, in
|
||||||
|
particular the <function>*send</> and <function>*recv</> functions for
|
||||||
|
the data type (typically found in the <filename>src/backend/utils/adt</filename>
|
||||||
|
directory). The <application>contrib/binarycopy</application> module
|
||||||
|
can also be used to create an appropriate format file.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If OIDs are included in the file, the OID field immediately follows the
|
If OIDs are included in the file, the OID field immediately follows the
|
||||||
field-count word. It is a normal field except that it's not included
|
field-count word. It is a normal field except that it's not included
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_aggregate.sgml,v 1.26 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_aggregate.sgml,v 1.26.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new aggregate function</refpurpose>
|
<refpurpose>define a new aggregate function</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createaggregate">
|
||||||
|
<primary>CREATE AGGREGATE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
|
CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_cast.sgml,v 1.11 2003/04/22 10:08:08 petere Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_cast.sgml,v 1.11.2.1 2003/09/07 04:36:44 momjian Exp $ -->
|
||||||
|
|
||||||
<refentry id="SQL-CREATECAST">
|
<refentry id="SQL-CREATECAST">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
@ -11,6 +11,10 @@
|
|||||||
<refpurpose>define a user-defined cast</refpurpose>
|
<refpurpose>define a user-defined cast</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createcast">
|
||||||
|
<primary>CREATE CAST</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE CAST (<replaceable>sourcetype</replaceable> AS <replaceable>targettype</replaceable>)
|
CREATE CAST (<replaceable>sourcetype</replaceable> AS <replaceable>targettype</replaceable>)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_constraint.sgml,v 1.9 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_constraint.sgml,v 1.9.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new constraint trigger</refpurpose>
|
<refpurpose>define a new constraint trigger</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createconstraint">
|
||||||
|
<primary>CREATE CONSTRAINT</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE CONSTRAINT TRIGGER <replaceable class="parameter">name</replaceable>
|
CREATE CONSTRAINT TRIGGER <replaceable class="parameter">name</replaceable>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_conversion.sgml,v 1.10 2003/06/27 14:45:26 petere Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_conversion.sgml,v 1.10.2.1 2003/09/07 04:36:44 momjian Exp $ -->
|
||||||
|
|
||||||
<refentry id="SQL-CREATECONVERSION">
|
<refentry id="SQL-CREATECONVERSION">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
@ -11,6 +11,10 @@
|
|||||||
<refpurpose>define a user-defined conversion</refpurpose>
|
<refpurpose>define a user-defined conversion</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createconversion">
|
||||||
|
<primary>CREATE CONVERSION</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [DEFAULT] CONVERSION <replaceable>name</replaceable>
|
CREATE [DEFAULT] CONVERSION <replaceable>name</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.34 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.34.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>create a new database</refpurpose>
|
<refpurpose>create a new database</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createdatabase">
|
||||||
|
<primary>CREATE DATABASE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
|
CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_domain.sgml,v 1.13 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_domain.sgml,v 1.13.2.1 2003/09/07 04:36:44 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new domain</refpurpose>
|
<refpurpose>define a new domain</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createdomain">
|
||||||
|
<primary>CREATE DOMAIN</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE DOMAIN <replaceable class="parameter">domainname</replaceable> [AS] <replaceable class="parameter">data_type</replaceable>
|
CREATE DOMAIN <replaceable class="parameter">domainname</replaceable> [AS] <replaceable class="parameter">data_type</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.48 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.48.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<refentry id="SQL-CREATEFUNCTION">
|
<refentry id="SQL-CREATEFUNCTION">
|
||||||
@ -13,6 +13,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.48 2003/06/27
|
|||||||
<refpurpose>define a new function</refpurpose>
|
<refpurpose>define a new function</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createfunction">
|
||||||
|
<primary>CREATE FUNCTION</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ OR REPLACE ] FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">argtype</replaceable> [, ...] ] )
|
CREATE [ OR REPLACE ] FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">argtype</replaceable> [, ...] ] )
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_group.sgml,v 1.11 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_group.sgml,v 1.11.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new user group</refpurpose>
|
<refpurpose>define a new user group</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-creategroup">
|
||||||
|
<primary>CREATE GROUP</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE GROUP <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replaceable class="PARAMETER">option</replaceable> [ ... ] ]
|
CREATE GROUP <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replaceable class="PARAMETER">option</replaceable> [ ... ] ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.39 2003/05/28 16:03:55 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.39.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new index</refpurpose>
|
<refpurpose>define a new index</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createindex">
|
||||||
|
<primary>CREATE INDEX</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable> [ USING <replaceable class="parameter">method</replaceable> ]
|
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable> [ USING <replaceable class="parameter">method</replaceable> ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_language.sgml,v 1.33 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_language.sgml,v 1.33.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new procedural language</refpurpose>
|
<refpurpose>define a new procedural language</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createlanguage">
|
||||||
|
<primary>CREATE LANGUAGE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">langname</replaceable>
|
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="parameter">langname</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_opclass.sgml,v 1.8 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_opclass.sgml,v 1.8.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new operator class for indexes</refpurpose>
|
<refpurpose>define a new operator class for indexes</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createopclass">
|
||||||
|
<primary>CREATE OPERATOR CLASS</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE OPERATOR CLASS <replaceable class="parameter">name</replaceable> [ DEFAULT ] FOR TYPE <replaceable class="parameter">data_type</replaceable> USING <replaceable class="parameter">index_method</replaceable> AS
|
CREATE OPERATOR CLASS <replaceable class="parameter">name</replaceable> [ DEFAULT ] FOR TYPE <replaceable class="parameter">data_type</replaceable> USING <replaceable class="parameter">index_method</replaceable> AS
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.35 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.35.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new operator</refpurpose>
|
<refpurpose>define a new operator</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createoperator">
|
||||||
|
<primary>CREATE OPERATOR</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE OPERATOR <replaceable>name</replaceable> (
|
CREATE OPERATOR <replaceable>name</replaceable> (
|
||||||
@ -43,17 +47,11 @@ CREATE OPERATOR <replaceable>name</replaceable> (
|
|||||||
The operator name is a sequence of up to <symbol>NAMEDATALEN</>-1
|
The operator name is a sequence of up to <symbol>NAMEDATALEN</>-1
|
||||||
(63 by default) characters from the following list:
|
(63 by default) characters from the following list:
|
||||||
<literallayout>
|
<literallayout>
|
||||||
+ - * / < > = ~ ! @ # % ^ & | ` ? $
|
+ - * / < > = ~ ! @ # % ^ & | ` ?
|
||||||
</literallayout>
|
</literallayout>
|
||||||
|
|
||||||
There are a few restrictions on your choice of name:
|
There are a few restrictions on your choice of name:
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
<literal>$</literal> cannot be defined as a single-character operator,
|
|
||||||
although it can be part of a multicharacter operator name.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>--</literal> and <literal>/*</literal> cannot appear anywhere in an operator name,
|
<literal>--</literal> and <literal>/*</literal> cannot appear anywhere in an operator name,
|
||||||
@ -66,7 +64,7 @@ CREATE OPERATOR <replaceable>name</replaceable> (
|
|||||||
<literal>-</literal>,
|
<literal>-</literal>,
|
||||||
unless the name also contains at least one of these characters:
|
unless the name also contains at least one of these characters:
|
||||||
<literallayout>
|
<literallayout>
|
||||||
~ ! @ # % ^ & | ` ? $
|
~ ! @ # % ^ & | ` ?
|
||||||
</literallayout>
|
</literallayout>
|
||||||
For example, <literal>@-</literal> is an allowed operator name,
|
For example, <literal>@-</literal> is an allowed operator name,
|
||||||
but <literal>*-</literal> is not.
|
but <literal>*-</literal> is not.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.39 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.39.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new rewrite rule</refpurpose>
|
<refpurpose>define a new rewrite rule</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createrule">
|
||||||
|
<primary>CREATE RULE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS ON <replaceable class="parameter">event</replaceable>
|
CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS ON <replaceable class="parameter">event</replaceable>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_schema.sgml,v 1.6 2003/06/27 14:45:26 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_schema.sgml,v 1.6.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new schema</refpurpose>
|
<refpurpose>define a new schema</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createschema">
|
||||||
|
<primary>CREATE SCHEMA</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE SCHEMA <replaceable class="parameter">schemaname</replaceable> [ AUTHORIZATION <replaceable class="parameter">username</replaceable> ] [ <replaceable class="parameter">schema_element</replaceable> [ ... ] ]
|
CREATE SCHEMA <replaceable class="parameter">schemaname</replaceable> [ AUTHORIZATION <replaceable class="parameter">username</replaceable> ] [ <replaceable class="parameter">schema_element</replaceable> [ ... ] ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.33 2003/04/22 10:08:08 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.33.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new sequence generator</refpurpose>
|
<refpurpose>define a new sequence generator</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createsequence">
|
||||||
|
<primary>CREATE SEQUENCE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT [ BY ] <replaceable class="parameter">increment</replaceable> ]
|
CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT [ BY ] <replaceable class="parameter">increment</replaceable> ]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.70 2003/06/12 18:34:06 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.70.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>define a new table</refpurpose>
|
<refpurpose>define a new table</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createtable">
|
||||||
|
<primary>CREATE TABLE</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable class="PARAMETER">table_name</replaceable> (
|
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable class="PARAMETER">table_name</replaceable> (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table_as.sgml,v 1.14 2003/07/01 00:04:31 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table_as.sgml,v 1.14.2.1 2003/09/07 04:36:45 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -14,6 +14,10 @@ PostgreSQL documentation
|
|||||||
<refpurpose>create a new table from the results of a query</refpurpose>
|
<refpurpose>create a new table from the results of a query</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
<indexterm zone="sql-createtableas">
|
||||||
|
<primary>CREATE TABLE AS</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name</replaceable> [ (<replaceable>column_name</replaceable> [, ...] ) ]
|
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name</replaceable> [ (<replaceable>column_name</replaceable> [, ...] ) ]
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user