summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2014-09-01 13:08:55 +0000
committerPavan Deolasee2014-09-01 13:08:55 +0000
commitcae66e77ac771fe3dc9aaaf6c2a003b8c1e3270f (patch)
treef6799e67bb566a25e73b37524e87c7bf105e2b10
parent76311ec1ea9812e1712b7543f3db1768d9b4e77e (diff)
Make appropriate documentation changes to describe XL's functionality correctly
-rw-r--r--doc-xc/Makefile4
-rw-r--r--doc-xc/bug.template12
-rw-r--r--doc-xc/src/Makefile2
-rw-r--r--doc-xc/src/sgml/.gitignore3
-rw-r--r--doc-xc/src/sgml/Makefile8
-rw-r--r--doc-xc/src/sgml/acronyms.sgmlin36
-rw-r--r--doc-xc/src/sgml/add-node.sgmlin257
-rw-r--r--doc-xc/src/sgml/advanced.sgmlin130
-rw-r--r--doc-xc/src/sgml/arch-dev.sgmlin533
-rw-r--r--doc-xc/src/sgml/array.sgmlin15
-rw-r--r--doc-xc/src/sgml/auto-explain.sgmlin11
-rw-r--r--doc-xc/src/sgml/backup.sgmlin21
-rw-r--r--doc-xc/src/sgml/biblio.sgmlin26
-rw-r--r--doc-xc/src/sgml/bki.sgmlin3
-rw-r--r--doc-xc/src/sgml/btree-gist.sgmlin6
-rw-r--r--doc-xc/src/sgml/catalogs.sgmlin269
-rw-r--r--doc-xc/src/sgml/charset.sgmlin58
-rw-r--r--doc-xc/src/sgml/citext.sgmlin27
-rw-r--r--doc-xc/src/sgml/client-auth.sgmlin81
-rw-r--r--doc-xc/src/sgml/common.sgmlin7
-rw-r--r--doc-xc/src/sgml/config.sgmlin619
-rw-r--r--doc-xc/src/sgml/contrib.sgmlin7
-rw-r--r--doc-xc/src/sgml/datatype.sgmlin175
-rw-r--r--doc-xc/src/sgml/datetime.sgmlin19
-rw-r--r--doc-xc/src/sgml/dblink.sgmlin308
-rw-r--r--doc-xc/src/sgml/ddl.sgmlin256
-rw-r--r--doc-xc/src/sgml/dfunc.sgmlin12
-rw-r--r--doc-xc/src/sgml/dml.sgmlin10
-rw-r--r--doc-xc/src/sgml/docguide.sgmlin79
-rw-r--r--doc-xc/src/sgml/extend.sgmlin41
-rw-r--r--doc-xc/src/sgml/external-projects.sgmlin8
-rw-r--r--doc-xc/src/sgml/features-supported.sgmlin2078
-rw-r--r--doc-xc/src/sgml/features-unsupported.sgmlin1826
-rw-r--r--doc-xc/src/sgml/filelist.sgmlin19
-rw-r--r--doc-xc/src/sgml/func.sgmlin933
-rw-r--r--doc-xc/src/sgml/geqo.sgmlin9
-rw-r--r--doc-xc/src/sgml/gin.sgmlin9
-rw-r--r--doc-xc/src/sgml/gist.sgmlin17
-rw-r--r--doc-xc/src/sgml/high-availability.sgmlin13
-rw-r--r--doc-xc/src/sgml/history.sgmlin36
-rw-r--r--doc-xc/src/sgml/indices.sgmlin62
-rw-r--r--doc-xc/src/sgml/info.sgmlin35
-rw-r--r--doc-xc/src/sgml/information_schema.sgmlin537
-rw-r--r--doc-xc/src/sgml/installation.sgmlin883
-rw-r--r--doc-xc/src/sgml/intro.sgmlin344
-rw-r--r--doc-xc/src/sgml/keywords.sgmlin80
-rw-r--r--doc-xc/src/sgml/legal.sgmlin399
-rw-r--r--doc-xc/src/sgml/libpq.sgmlin200
-rw-r--r--doc-xc/src/sgml/lo.sgmlin10
-rw-r--r--doc-xc/src/sgml/lobj.sgmlin11
-rw-r--r--doc-xc/src/sgml/ltree.sgmlin9
-rw-r--r--doc-xc/src/sgml/maintenance.sgmlin125
-rw-r--r--doc-xc/src/sgml/manage-ag.sgmlin40
-rw-r--r--doc-xc/src/sgml/mvcc.sgmlin171
-rw-r--r--doc-xc/src/sgml/nls.sgmlin9
-rw-r--r--doc-xc/src/sgml/notation.sgmlin33
-rw-r--r--doc-xc/src/sgml/oid2name.sgmlin10
-rw-r--r--doc-xc/src/sgml/pageinspect.sgmlin10
-rw-r--r--doc-xc/src/sgml/perform.sgmlin94
-rw-r--r--doc-xc/src/sgml/pgarchivecleanup.sgmlin12
-rw-r--r--doc-xc/src/sgml/pgbench.sgmlin27
-rw-r--r--doc-xc/src/sgml/pgbuffercache.sgmlin10
-rw-r--r--doc-xc/src/sgml/pgfreespacemap.sgmlin11
-rw-r--r--doc-xc/src/sgml/pgnotice.sgmlin8
-rw-r--r--doc-xc/src/sgml/pgonly.sgmlin7
-rw-r--r--doc-xc/src/sgml/pgrowlocks.sgmlin11
-rw-r--r--doc-xc/src/sgml/pgstandby.sgmlin9
-rw-r--r--doc-xc/src/sgml/pgstatstatements.sgmlin7
-rw-r--r--doc-xc/src/sgml/pgstattuple.sgmlin11
-rw-r--r--doc-xc/src/sgml/pgupgrade.sgmlin10
-rw-r--r--doc-xc/src/sgml/pgxc_ctl-ref.sgmlin1851
-rw-r--r--doc-xc/src/sgml/pgxcclean.sgmlin10
-rw-r--r--doc-xc/src/sgml/pgxcddl.sgmlin19
-rw-r--r--doc-xc/src/sgml/pgxcmonitor.sgmlin4
-rw-r--r--doc-xc/src/sgml/plperl.sgmlin8
-rw-r--r--doc-xc/src/sgml/plpgsql.sgmlin77
-rw-r--r--doc-xc/src/sgml/pltcl.sgmlin58
-rw-r--r--doc-xc/src/sgml/postgres.sgmlin66
-rw-r--r--doc-xc/src/sgml/problems.sgmlin116
-rw-r--r--doc-xc/src/sgml/queries.sgmlin15
-rw-r--r--doc-xc/src/sgml/query.sgmlin50
-rw-r--r--doc-xc/src/sgml/recovery-config.sgmlin57
-rw-r--r--doc-xc/src/sgml/ref/abort.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/allfiles.sgmlin34
-rw-r--r--doc-xc/src/sgml/ref/alter_database.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/alter_domain.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/alter_foreign_data_wrapper.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/alter_function.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/alter_index.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/alter_large_object.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/alter_node.sgmlin165
-rw-r--r--doc-xc/src/sgml/ref/alter_opfamily.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/alter_role.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/alter_server.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/alter_table.sgmlin226
-rw-r--r--doc-xc/src/sgml/ref/alter_trigger.sgmlin18
-rw-r--r--doc-xc/src/sgml/ref/alter_user.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/alter_user_mapping.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/alter_view.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/begin.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/checkpoint.sgmlin7
-rw-r--r--doc-xc/src/sgml/ref/clean_connection.sgmlin21
-rw-r--r--doc-xc/src/sgml/ref/cluster.sgmlin13
-rw-r--r--doc-xc/src/sgml/ref/commit_prepared.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/copy.sgmlin35
-rw-r--r--doc-xc/src/sgml/ref/create_aggregate.sgmlin187
-rw-r--r--doc-xc/src/sgml/ref/create_barrier.sgmlin58
-rw-r--r--doc-xc/src/sgml/ref/create_cast.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/create_conversion.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/create_database.sgmlin18
-rw-r--r--doc-xc/src/sgml/ref/create_foreign_data_wrapper.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/create_function.sgmlin43
-rw-r--r--doc-xc/src/sgml/ref/create_index.sgmlin67
-rw-r--r--doc-xc/src/sgml/ref/create_language.sgmlin18
-rw-r--r--doc-xc/src/sgml/ref/create_node.sgmlin199
-rw-r--r--doc-xc/src/sgml/ref/create_nodegroup.sgmlin96
-rw-r--r--doc-xc/src/sgml/ref/create_opclass.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/create_operator.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/create_opfamily.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/create_role.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/create_rule.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/create_schema.sgmlin9
-rw-r--r--doc-xc/src/sgml/ref/create_server.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/create_table.sgmlin310
-rw-r--r--doc-xc/src/sgml/ref/create_table_as.sgmlin125
-rw-r--r--doc-xc/src/sgml/ref/create_tablespace.sgmlin22
-rw-r--r--doc-xc/src/sgml/ref/create_trigger.sgmlin25
-rw-r--r--doc-xc/src/sgml/ref/create_type.sgmlin25
-rw-r--r--doc-xc/src/sgml/ref/create_user.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/create_user_mapping.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/create_view.sgmlin26
-rw-r--r--doc-xc/src/sgml/ref/createdb.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/createlang.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/createuser.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/declare.sgmlin33
-rw-r--r--doc-xc/src/sgml/ref/delete.sgmlin27
-rw-r--r--doc-xc/src/sgml/ref/drop_conversion.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/drop_database.sgmlin9
-rw-r--r--doc-xc/src/sgml/ref/drop_domain.sgmlin4
-rw-r--r--doc-xc/src/sgml/ref/drop_foreign_data_wrapper.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/drop_index.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/drop_node.sgmlin82
-rw-r--r--doc-xc/src/sgml/ref/drop_nodegroup.sgmlin79
-rw-r--r--doc-xc/src/sgml/ref/drop_owned.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/drop_role.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/drop_schema.sgmlin4
-rw-r--r--doc-xc/src/sgml/ref/drop_server.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/drop_table.sgmlin4
-rw-r--r--doc-xc/src/sgml/ref/drop_tablespace.sgmlin7
-rw-r--r--doc-xc/src/sgml/ref/drop_trigger.sgmlin18
-rw-r--r--doc-xc/src/sgml/ref/drop_type.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/drop_user.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/drop_user_mapping.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/drop_view.sgmlin4
-rw-r--r--doc-xc/src/sgml/ref/droplang.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/dropuser.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/execute_direct.sgmlin17
-rw-r--r--doc-xc/src/sgml/ref/explain.sgmlin35
-rw-r--r--doc-xc/src/sgml/ref/fetch.sgmlin96
-rw-r--r--doc-xc/src/sgml/ref/grant.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/gtm.sgmlin49
-rw-r--r--doc-xc/src/sgml/ref/gtm_ctl.sgmlin4
-rw-r--r--doc-xc/src/sgml/ref/gtm_proxy.sgmlin111
-rw-r--r--doc-xc/src/sgml/ref/initdb.sgmlin39
-rw-r--r--doc-xc/src/sgml/ref/initgtm.sgmlin200
-rw-r--r--doc-xc/src/sgml/ref/listen.sgmlin7
-rw-r--r--doc-xc/src/sgml/ref/load.sgmlin12
-rw-r--r--doc-xc/src/sgml/ref/notify.sgmlin7
-rw-r--r--doc-xc/src/sgml/ref/pause_cluster.sgmlin70
-rw-r--r--doc-xc/src/sgml/ref/pg_config-ref.sgmlin46
-rw-r--r--doc-xc/src/sgml/ref/pg_controldata.sgmlin10
-rw-r--r--doc-xc/src/sgml/ref/pg_ctl-ref.sgmlin37
-rw-r--r--doc-xc/src/sgml/ref/pg_dump.sgmlin13
-rw-r--r--doc-xc/src/sgml/ref/pg_dumpall.sgmlin11
-rw-r--r--doc-xc/src/sgml/ref/pg_resetxlog.sgmlin10
-rw-r--r--doc-xc/src/sgml/ref/pgxc_clean-ref.sgmlin226
-rw-r--r--doc-xc/src/sgml/ref/pgxc_ddl.sgmlin313
-rw-r--r--doc-xc/src/sgml/ref/postgres-ref.sgmlin88
-rw-r--r--doc-xc/src/sgml/ref/postmaster.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/prepare_transaction.sgmlin16
-rw-r--r--doc-xc/src/sgml/ref/psql-ref.sgmlin49
-rw-r--r--doc-xc/src/sgml/ref/reassign_owned.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/reindex.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/reindexdb.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/release_savepoint.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/reset.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/revoke.sgmlin3
-rw-r--r--doc-xc/src/sgml/ref/rollback_prepared.sgmlin15
-rw-r--r--doc-xc/src/sgml/ref/rollback_to.sgmlin8
-rw-r--r--doc-xc/src/sgml/ref/savepoint.sgmlin10
-rw-r--r--doc-xc/src/sgml/ref/select_into.sgmlin10
-rw-r--r--doc-xc/src/sgml/ref/set.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/show.sgmlin10
-rw-r--r--doc-xc/src/sgml/ref/start_transaction.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/truncate.sgmlin6
-rw-r--r--doc-xc/src/sgml/ref/unlisten.sgmlin7
-rw-r--r--doc-xc/src/sgml/ref/unpause_cluster.sgmlin55
-rw-r--r--doc-xc/src/sgml/ref/update.sgmlin23
-rw-r--r--doc-xc/src/sgml/ref/vacuum.sgmlin16
-rw-r--r--doc-xc/src/sgml/ref/vacuumdb.sgmlin18
-rw-r--r--doc-xc/src/sgml/ref/values.sgmlin6
-rw-r--r--doc-xc/src/sgml/reference.sgmlin52
-rw-r--r--doc-xc/src/sgml/regress.sgmlin45
-rw-r--r--doc-xc/src/sgml/release-xc-1.0.sgmlin288
-rw-r--r--doc-xc/src/sgml/release-xl-9.2.sgmlin527
-rw-r--r--doc-xc/src/sgml/release.sgmlin23
-rw-r--r--doc-xc/src/sgml/remove-node.sgmlin160
-rw-r--r--doc-xc/src/sgml/rules.sgmlin16
-rw-r--r--doc-xc/src/sgml/runtime.sgmlin799
-rw-r--r--doc-xc/src/sgml/sourcerepo.sgmlin97
-rw-r--r--doc-xc/src/sgml/sources.sgmlin6
-rw-r--r--doc-xc/src/sgml/sql.sgmlin20
-rw-r--r--doc-xc/src/sgml/start.sgmlin253
-rw-r--r--doc-xc/src/sgml/syntax.sgmlin63
-rw-r--r--doc-xc/src/sgml/textsearch.sgmlin99
-rw-r--r--doc-xc/src/sgml/trigger.sgmlin75
-rw-r--r--doc-xc/src/sgml/typeconv.sgmlin67
-rw-r--r--doc-xc/src/sgml/unaccent.sgmlin3
-rw-r--r--doc-xc/src/sgml/user-manag.sgmlin18
-rw-r--r--doc-xc/src/sgml/vacuumlo.sgmlin9
-rw-r--r--doc-xc/src/sgml/version.sgmlin2
-rw-r--r--doc-xc/src/sgml/wal.sgmlin105
-rw-r--r--doc-xc/src/sgml/xaggr.sgmlin115
-rw-r--r--doc-xc/src/sgml/xc-constraint.sgmlin8
-rw-r--r--doc-xc/src/sgml/xfunc.sgmlin149
-rw-r--r--doc-xc/src/sgml/xindex.sgmlin25
-rw-r--r--doc-xc/src/sgml/xlonly.sgmlin7
-rw-r--r--doc-xc/src/sgml/xml2.sgmlin6
-rw-r--r--doc-xc/src/sgml/xoper.sgmlin24
-rw-r--r--doc-xc/src/sgml/xplang.sgmlin12
-rw-r--r--doc-xc/src/sgml/xtypes.sgmlin6
-rw-r--r--doc/bug.template2
-rw-r--r--doc/src/sgml/ref/pg_basebackup.sgml14
-rw-r--r--doc/src/sgml/ref/pg_receivexlog.sgml13
234 files changed, 19953 insertions, 680 deletions
diff --git a/doc-xc/Makefile b/doc-xc/Makefile
index 8d81c14ed7..2e5e09ef88 100644
--- a/doc-xc/Makefile
+++ b/doc-xc/Makefile
@@ -1,6 +1,6 @@
#----------------------------------------------------------------------------
#
-# Postgres-XC documentation top-level makefile
+# PostgreSQL documentation top-level makefile
#
# Copyright (c) 1994, Regents of the University of California
#
@@ -8,7 +8,7 @@
#
#----------------------------------------------------------------------------
-subdir = doc-xc
+subdir = doc
top_builddir = ..
include $(top_builddir)/src/Makefile.global
diff --git a/doc-xc/bug.template b/doc-xc/bug.template
index 0fb9db0a37..392394fed8 100644
--- a/doc-xc/bug.template
+++ b/doc-xc/bug.template
@@ -1,19 +1,19 @@
If PostgreSQL failed to compile on your computer or you found a bug,
-please fill out this form and e-mail it to [email protected].
+please fill out this form and e-mail it to [email protected].
If your bug report has security implications and you'd prefer that it not
-become immediately visible in public archives, don't send it to postgres-xc-bugs.
+become immediately visible in public archives, don't send it to postgres-xl-bugs.
Security issues can be reported privately to [email protected].
If you not only found the problem but solved it and generated a patch
-then e-mail it to [email protected] instead. Please use the
+then e-mail it to [email protected] instead. Please use the
command "diff -c" to generate the patch.
-You may also enter a bug report at http://sourceforge.net/projects/postgres-xc/
+You may also enter a bug report at http://sourceforge.net/projects/postgres-xl/
instead of e-mailing this form.
============================================================================
- POSTGRES-XC BUG REPORT TEMPLATE
+ POSTGRES-XL BUG REPORT TEMPLATE
============================================================================
@@ -27,7 +27,7 @@ System Configuration:
Operating System (example: Linux 2.4.18) :
- Postgres-XC version (example: Postgres-XC 1.1devel): Postgres-XC 1.1devel
+ Postgres-XL version (example: Postgres-XL 9.2): Postgres-XL 9.2
Compiler used (example: gcc 3.3.5) :
diff --git a/doc-xc/src/Makefile b/doc-xc/src/Makefile
index aae33e501e..b0d4f1f506 100644
--- a/doc-xc/src/Makefile
+++ b/doc-xc/src/Makefile
@@ -1,6 +1,6 @@
# doc/src/Makefile
-subdir = doc-xc/src
+subdir = doc/src
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
diff --git a/doc-xc/src/sgml/.gitignore b/doc-xc/src/sgml/.gitignore
index 71258a3a23..e1b84b490f 100644
--- a/doc-xc/src/sgml/.gitignore
+++ b/doc-xc/src/sgml/.gitignore
@@ -31,6 +31,3 @@
/postgres-A4.aux
/postgres-A4.log
/postgres-A4.out
-# sgml files generated from sgmlin
-/*.sgml
-/ref/*.sgml \ No newline at end of file
diff --git a/doc-xc/src/sgml/Makefile b/doc-xc/src/sgml/Makefile
index a3809bde07..9c69b15f21 100644
--- a/doc-xc/src/sgml/Makefile
+++ b/doc-xc/src/sgml/Makefile
@@ -51,7 +51,7 @@ ifndef XSLTPROC
XSLTPROC = xsltproc
endif
-VERSION = 1.1devel
+VERSION = 9.2
override XSLTPROCFLAGS += --stringparam pg.version '$(VERSION)'
@@ -401,6 +401,8 @@ clean:
rm -f postgres.xml postgres.xmltmp htmlhelp.hhp toc.hhc index.hhk *.fo
# Texinfo
rm -f *.texixml *.texi *.info db2texi.refs
+# sgml
+ rm -f $(ALLSGMLTOREMOVE)
distclean: clean
@@ -409,12 +411,10 @@ maintainer-clean: distclean
rm -fr html/ html-stamp
# man
rm -rf man1/ man3/ man7/ man-stamp
-# sgml
- rm -f $(ALLSGMLTOREMOVE)
.PHONY: sgmlfiles
-INC_LIST = -I XC -I EN
+INC_LIST = -I XL -I EN
EXC_LIST = -E PG -E JP
sgmlfiles:
diff --git a/doc-xc/src/sgml/acronyms.sgmlin b/doc-xc/src/sgml/acronyms.sgmlin
index 137db76234..f61d477b35 100644
--- a/doc-xc/src/sgml/acronyms.sgmlin
+++ b/doc-xc/src/sgml/acronyms.sgmlin
@@ -12,6 +12,10 @@
This is a list of acronyms commonly used in the <productname>Postgres-XC</>
documentation and in discussions about <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ This is a list of acronyms commonly used in the <productname>Postgres-XL</>
+ documentation and in discussions about <productname>Postgres-XL</>.
+<!## end>
<variablelist>
@@ -197,6 +201,9 @@
<!## XC>
<link linkend="ecpg">Embedded C for Postgres-XC</link>
<!## end>
+<!## XL>
+ <link linkend="ecpg">Embedded C for Postgres-XL</link>
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -286,6 +293,16 @@
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><acronym>GTM</acronym></term>
+ <listitem>
+ <para>
+ Global Transaction Manager
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><acronym>GSSAPI</acronym></term>
@@ -309,6 +326,9 @@
<!## XC>
the <productname>Postgres-XC</> subsystem that handles server configuration
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</> subsystem that handles server configuration
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -323,6 +343,16 @@
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><acronym>GXID</acronym></term>
+ <listitem>
+ <para>
+ Global Transaction Identifier
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><acronym>HBA</acronym></term>
@@ -520,6 +550,9 @@
<!## XC>
<link linkend="postgres"><productname>Postgres-XC</></link>
<!## end>
+<!## XL>
+ <link linkend="postgres"><productname>Postgres-XL</></link>
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -534,6 +567,9 @@
<!## XC>
<link linkend="extend-pgxs"><productname>Postgres-XC</> Extension System</link>
<!## end>
+<!## XL>
+ <link linkend="extend-pgxs"><productname>Postgres-XL</> Extension System</link>
+<!## end>
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/add-node.sgmlin b/doc-xc/src/sgml/add-node.sgmlin
new file mode 100644
index 0000000000..fb3b447b94
--- /dev/null
+++ b/doc-xc/src/sgml/add-node.sgmlin
@@ -0,0 +1,257 @@
+<!-- doc/src/sgml/add-node.sgml -->
+
+<chapter id="add-node">
+ <title>Adding a New Node</title>
+
+ <indexterm zone="add-node">
+ <primary>Add a new node</primary>
+ </indexterm>
+
+&xlonly;
+
+ <para>
+ This chapter outlines steps to add a new Coordinator or a Datanode to a running cluster.
+ Note that an easier way to do this is to make use of the pgxc_ctl utility.
+ </para>
+
+ <para>
+
+ </para>
+
+ <sect1 id="add-node-coordinator">
+ <title>Adding a New Coordinator</title>
+
+ <indexterm zone="add-node-coordinator">
+ <primary>Add a new coordinator</primary>
+ </indexterm>
+
+ <para>
+ The following steps should be performed to add a new coordinator to a running cluster:
+ </para>
+
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>Initialize the new coordinator. The following example initilizes a coordinator named coord_3.</para>
+ <programlisting>
+ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_cord3 --nodename coord_3
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make necessary changes in postgresql.conf of the new coordinator,
+ in particular specify new coordinator name and pooler port.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the existing coordinators and lock the cluster for backup, do not close this session.
+ The following example assumes a coordinator is running on port 5432. Make sure the function call returns true.
+ The detailed description of the function <function>pgxc_lock_for_backup</> can be found
+ in <xref linkend="functions-pgxc-add-new-node">
+ </para>
+ <programlisting>
+ ./psql postgres -p 5432
+ select pgxc_lock_for_backup();
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the existing coordinators and take backup of the database.
+ Please note that only schema (i.e. no data) is to be dumped.
+ Also note the use of <option>--include-nodes</>, so that the <command>CREATE TABLE</> contains <command>TO NODE</> clause.
+ Similarly <option>--dump-nodes</> ensures that the dump does contain existing nodes and node groups.
+ </para>
+ <programlisting>
+ ./pg_dumpall -p 5432 -s --include-nodes --dump-nodes --file=/some/valid/path/some_file_name.sql
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Start the new coordinator specifying <option>--restoremode</> while starting.
+ The following example starts the new coordinator on port 5455
+ </para>
+ <programlisting>
+ ./postgres --restoremode -D ../data_cord3 -p 5455
+ </programlisting>
+ <para>
+ You can use <literal>pg_ctl</literal> with <option>-Z restoremode</option> option.
+ </para>
+ <programlisting>
+ ./pg_ctl start -Z restoremode -D ../data_coord3 -p 5455
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restore the backup (taken in step 4) by connecting to the new coordinator directly.
+ </para>
+ <programlisting>
+ ./psql -d postgres -f /some/valid/path/some_file_name.sql -p 5455
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Quit the new coordinator.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Start the new coordinator specifying <option>--coordinator</> while starting.
+ The following example starts the new coordinator on port 5455
+ </para>
+ <programlisting>
+ ./postgres --coordinator -D ../data_cord3 -p 5455
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Create the new coordinator on rest of the coordinators and reload configuration.
+ The following example creates coord_3, with host localhost and port 5455.
+ </para>
+ <programlisting>
+ CREATE NODE COORD_3 WITH (HOST = 'localhost', type = 'coordinator', PORT = 5455);
+ SELECT pgxc_pool_reload();
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Quit the session of step 3, this will unlock the cluster. The new coordinator is now ready.
+ </para>
+ </listitem>
+
+ </orderedlist>
+ </para>
+
+ </sect1>
+
+ <sect1 id="add-node-datanode">
+ <title>Adding a New Datanode</title>
+
+ <indexterm zone="add-node-datanode">
+ <primary>Add a new Datanode</primary>
+ </indexterm>
+
+ <para>
+ Following steps should be performed to add a new datanode to a running cluster:
+ </para>
+
+ <para>
+ <orderedlist>
+
+ <listitem>
+ <para>
+ Initialize the new datanode. The following example initializes a new datanode named data_node_3.
+ </para>
+ <programlisting>
+ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data3 --nodename data_node_3
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make the necessary changes in postgresql.conf of the new datanode, in particular specify new datanode name
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the existing coordinators and lock the cluster for backup, do not close this session.
+ The following example assumes a coordinator is running on port 5432. Make sure the function call returns true.
+ The detailed description of the function <function>pgxc_lock_for_backup</> can be found
+ in <xref linkend="functions-pgxc-add-new-node">
+ </para>
+ <programlisting>
+ ./psql postgres -p 5432
+ select pgxc_lock_for_backup();
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the existing datanodes and take backup of the database.
+ Please note that only schema (i.e. no data) is to be dumped.
+ The following example assumes that a datanode is running on port 15432.
+ </para>
+ <programlisting>
+ ./pg_dumpall -p 15432 -s --file=/some/valid/path/some_file_name.sql
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Start the new datanode specifying <option>--restoremode</> while starting the it.
+ The following example starts the new datanode on port 35432.
+ </para>
+ <programlisting>
+ ./postgres --restoremode -D ../data3 -p 35432
+ </programlisting>
+ <para>
+ You can use <literal>pg_ctl</literal> with <option>-Z restoremode</option> option.
+ </para>
+ <programlisting>
+ ./pg_ctl start -Z restoremode -D ../data3 -p 5455
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restore the backup (taken in step 4) by connecting to the new datanode directly.
+ </para>
+ <programlisting>
+ ./psql -d postgres -f /some/valid/path/some_file_name.sql -p 35432
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Quit the new datanode.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Start the new datanode specifying --datanode while starting.
+ </para>
+ <programlisting>
+ ./postgres --datanode -D ../data3 -p 35432
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Create the new datanode on all the coordinators and reload configuration.
+ The following example creates data_node_3, with host localhost and port 35432.
+ </para>
+ <programlisting>
+ CREATE NODE DATA_NODE_3 WITH (HOST = 'localhost', type = 'datanode', PORT = 35432);
+ SELECT pgxc_pool_reload();
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Quit the session of step 3, this will unlock the cluster.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Redistribute existing data by using <command>ALTER TABLE REDISTRIBUTE</>. The new datanode is now ready.
+ </para>
+ </listitem>
+
+ </orderedlist>
+ </para>
+
+ </sect1>
+
+</chapter>
diff --git a/doc-xc/src/sgml/advanced.sgmlin b/doc-xc/src/sgml/advanced.sgmlin
index 9036e02580..daae1dc8b2 100644
--- a/doc-xc/src/sgml/advanced.sgmlin
+++ b/doc-xc/src/sgml/advanced.sgmlin
@@ -26,6 +26,15 @@
we will look at some <productname>Postgres-XC</productname>
extensions.
<!## end>
+<!## XL>
+ In the previous chapter we have covered the basics of using
+ <acronym>SQL</acronym> to store and access your data in
+ <productname>Postgres-XL</productname>. We will now discuss some
+ more advanced features of <acronym>SQL</acronym> that simplify
+ management and prevent loss or corruption of your data. Finally,
+ we will look at some <productname>Postgres-XL</productname>
+ extensions.
+<!## end>
</para>
<para>
@@ -111,6 +120,9 @@ SELECT * FROM myview;
<!## XC>
<productname>Postgres-XC</productname> can do this for you.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can do this for you.
+<!## end>
</para>
<para>
@@ -250,6 +262,106 @@ UPDATE branches SET balance = balance + 100.00
</para>
<para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that primary key and reference key are both allowed
+ only when these columns are distribution keys when tables are
+ distributed. As a default, <productname>Postgres-XL</>
+ distributes each row of tables based upon the value of the first
+ column of the table. You can choose any column as a basis of
+ table distribution, or you can have copies of a table in all the
+ Datanodes by specifying that it should be distributed by replication.
+ </para>
+ <para>
+ Please refer to <xref linkend="sql-select"> for details.
+ </para>
+
+ </sect1>
+
+
+ <sect1 id="tutorial-transactions">
+ <title>Transactions</title>
+
+ <indexterm zone="tutorial-transactions">
+ <primary>transaction</primary>
+ </indexterm>
+
+&common;
+ <para>
+ <firstterm>Transactions</> are a fundamental concept of all database
+ systems. The essential point of a transaction is that it bundles
+ multiple steps into a single, all-or-nothing operation. The intermediate
+ states between the steps are not visible to other concurrent transactions,
+ and if some failure occurs that prevents the transaction from completing,
+ then none of the steps affect the database at all.
+ </para>
+
+ <para>
+ For example, consider a bank database that contains balances for various
+ customer accounts, as well as total deposit balances for branches.
+ Suppose that we want to record a payment of $100.00 from Alice's account
+ to Bob's account. Simplifying outrageously, the SQL commands for this
+ might look like:
+
+<programlisting>
+UPDATE accounts SET balance = balance - 100.00
+ WHERE name = 'Alice';
+UPDATE branches SET balance = balance - 100.00
+ WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Alice');
+UPDATE accounts SET balance = balance + 100.00
+ WHERE name = 'Bob';
+UPDATE branches SET balance = balance + 100.00
+ WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Bob');
+</programlisting>
+ </para>
+
+ <para>
+ The details of these commands are not important here; the important
+ point is that there are several separate updates involved to accomplish
+ this rather simple operation. Our bank's officers will want to be
+ assured that either all these updates happen, or none of them happen.
+ It would certainly not do for a system failure to result in Bob
+ receiving $100.00 that was not debited from Alice. Nor would Alice long
+ remain a happy customer if she was debited without Bob being credited.
+ We need a guarantee that if something goes wrong partway through the
+ operation, none of the steps executed so far will take effect. Grouping
+ the updates into a <firstterm>transaction</> gives us this guarantee.
+ A transaction is said to be <firstterm>atomic</>: from the point of
+ view of other transactions, it either happens completely or not at all.
+ </para>
+
+ <para>
+ We also want a
+ guarantee that once a transaction is completed and acknowledged by
+ the database system, it has indeed been permanently recorded
+ and won't be lost even if a crash ensues shortly thereafter.
+ For example, if we are recording a cash withdrawal by Bob,
+ we do not want any chance that the debit to his account will
+ disappear in a crash just after he walks out the bank door.
+ A transactional database guarantees that all the updates made by
+ a transaction are logged in permanent storage (i.e., on disk) before
+ the transaction is reported complete.
+ </para>
+
+ <para>
+ Another important property of transactional databases is closely
+ related to the notion of atomic updates: when multiple transactions
+ are running concurrently, each one should not be able to see the
+ incomplete changes made by others. For example, if one transaction
+ is busy totalling all the branch balances, it would not do for it
+ to include the debit from Alice's branch but not the credit to
+ Bob's branch, nor vice versa. So transactions must be all-or-nothing
+ not only in terms of their permanent effect on the database, but
+ also in terms of their visibility as they happen. The updates made
+ so far by an open transaction are invisible to other transactions
+ until the transaction completes, whereupon all the updates become
+ visible simultaneously.
+ </para>
+<!## end>
+
+ <para>
<!## PG>
In <productname>PostgreSQL</>, a transaction is set up by surrounding
the SQL commands of the transaction with
@@ -262,6 +374,12 @@ UPDATE branches SET balance = balance + 100.00
<command>BEGIN</> and <command>COMMIT</> commands. So our banking
transaction would actually look like:
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</>, a transaction is set up by surrounding
+ the SQL commands of the transaction with
+ <command>BEGIN</> and <command>COMMIT</> commands. So our banking
+ transaction would actually look like:
+<!## end>
<programlisting>
BEGIN;
@@ -286,6 +404,9 @@ COMMIT;
<!## XC>
<productname>Postgres-XC</> actually treats every SQL statement as being
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> actually treats every SQL statement as being
+<!## end>
executed within a transaction. If you do not issue a <command>BEGIN</>
command,
then each individual statement has an implicit <command>BEGIN</> and
@@ -695,6 +816,9 @@ CREATE TABLE capitals (
<!## XC>
<type>text</type>, a native <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <type>text</type>, a native <productname>Postgres-XL</productname>
+<!## end>
type for variable length character strings. State capitals have
an extra column, <structfield>state</>, that shows their state. In
<!## PG>
@@ -703,6 +827,9 @@ CREATE TABLE capitals (
<!## XC>
<productname>Postgres-XC</productname>, a table can inherit from
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, a table can inherit from
+<!## end>
zero or more other tables.
</para>
@@ -782,6 +909,9 @@ SELECT name, altitude
<!## XC>
<productname>Postgres-XC</productname> has many features not
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> has many features not
+<!## end>
touched upon in this tutorial introduction, which has been
oriented toward newer users of <acronym>SQL</acronym>. These
features are discussed in more detail in the remainder of this
diff --git a/doc-xc/src/sgml/arch-dev.sgmlin b/doc-xc/src/sgml/arch-dev.sgmlin
index 6a01c41fb6..fe4ef807b8 100644
--- a/doc-xc/src/sgml/arch-dev.sgmlin
+++ b/doc-xc/src/sgml/arch-dev.sgmlin
@@ -20,6 +20,15 @@
which <productname>Postgres-XC</productname> inherited most of
features.
</para>
+<!## end>
+<!## XL>
+ <para>
+ This chapter describes the internals
+ of <productname>PostgreSQL</productname>,
+ from which <productname>Postgres-XL</productname> inherited most of
+ features.
+ </para>
+<!## end>
&common;
<para>
@@ -1094,4 +1103,528 @@
</sect1>
</chapter>
<!## end>
+<!## XL>
+ <chapter id="xc-overview">
+ <title>Overview of <productname>Postgres-XL</productname> Internals</title>
+
+&xlonly;
+ <para>
+ This chapter gives an overview of the internal structure
+ of <productname>Postgres-XL</productname>.
+ </para>
+
+ <sect1 id="xc-overview-components">
+ <title><productname>Postgres-XL</productname> Components</title>
+&xlonly;
+ <para>
+ As described
+ in <xref linkend="intro-whatis">, <productname>Postgres-XL</productname>
+ is a database cluster which consists of multiple database servers
+ based
+ upon <productname>PostgreSQL</productname>. <productname>Postgres-XL</productname>
+ provides global transparent transaction management to all the
+ database servers involved and provide both read and write
+ scalability.
+ </para>
+
+ <para>
+ To achieve these features, <productname>Postgres-XL</productname>
+ is composed of three major components as follows:
+
+ <variablelist>
+ <varlistentry>
+ <term>GTM</term>
+ <listitem>
+ <para>
+ GTM stands for Global Transaction Manager. It provides global
+ transaction IDs and snapshots for each transaction
+ in the <productname>Postgres-XL</productname> database cluster.
+ It also provide several global values such as sequences and
+ global timestamps.
+ </para>
+ <para>
+ To improve scalability itself, each server hardware or virtual
+ machine may have GTM-Proxy. GTM-Proxy groups commands and
+ response from/to GTM to reduce number of interaction and the
+ amount of data which GTM reads and writes.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Coordinator</term>
+ <listitem>
+ <para>
+ Coordinator is an entry point
+ for <productname>Postgres-XL</productname> from applications.
+ You can configure more than one Coordinators in the
+ same <productname>Postgres-XL</productname>. With the help
+ of GTM, they provide transparent concurrency and integrity of
+ transactions globally. Applications can choose any
+ Coordinator to connect to. Any Coordinator provides the
+ same view of the database.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Datanode</term>
+ <listitem>
+ <para>
+ Datanode stores user data. As described
+ in <xref linkend="whatis-in-short">
+ and <xref linkend="SQL-CREATETABLE">, more than one Datanodes
+ can be configured. Each table can be replicated or
+ distributed among Datanodes. A table is distributed, you can
+ choose a column as the distribute key, whose value is used to
+ determine which Datanode each row should be stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="xc-overview-gtm">
+ <title>GTM and Global Transaction Management</title>
+&xlonly;
+ <sect2 id="xc-overview-gtm-pgreview">
+ <title>Review of <productname>PostgreSQL</productname> Transaction Management Internals</title>
+&common;
+ <para>
+ In PostgreSQL, each transaction is given unique ID called
+ transaction ID (or XID). XID is given in ascending order to
+ distinguish which transaction is older/newer.
+ <footnote>
+ <para>
+ More precisely, XID is 32bit integer. When XID reaches the max
+ value, it wraps around to the lowest value (3, as to the latest
+ definition). PostgreSQL has a means to handle this, as well as
+ Postgres-XL. For simplicity, it will not be described in this
+ document.
+ </para>
+ </footnote>
+ When a transaction tries to read a tuple,
+ <footnote>
+ <para>
+ This description is somewhat simplified for explanation. You
+ will find the precise rule in <filename>tqual.c</filename> file
+ in PostgreSQL's source code.
+ </para>
+ </footnote>
+ each tuple has a set of XIDs to indicate transactions which
+ created and deleted the tuple. So if the target tuple is created
+ by an active transaction, it is not committed or aborted and the
+ transaction should ignore such tuple. In such way (in practice,
+ this is done by versup module in PostgreSQL core), if we give
+ each transaction a unique transaction Id throughout the system
+ and maintain snapshot what transaction is active, not only in a
+ single server but transaction in all the servers, we can maintain
+ global consistent visibility of each tuple even when a server
+ accepts new statement from other transactions running on the
+ other server.
+ </para>
+ <para>
+ These information is stored in "<varname>xmin</varname>" and
+ "<varname>xmax</varname>" fields of each row of table. When
+ we <command>INSERT</command> rows, <varname>XID</varname> of
+ inserting transaction is recorded at xmin field. When we update
+ rows of tables (with <command>UPDATE</command>
+ or <command>DELETE</command> statement), PostgreSQL does not
+ simply overwrite the old rows. Instead, PostgreSQL
+ "<emphasis>marks</emphasis>" the old rows as
+ "<emphasis>deleted</emphasis>" by writing updating
+ transaction's <varname>XID</varname> to xmax field. In the case
+ of <command>UPDATE</command> (just
+ like <command>INSERT</command>), new rows are created whose xmin
+ field is "<emphasis>marked</emphasis>"
+ with <varname>XID</varname>s of the creating transaction.
+ </para>
+ <para>
+ These "<varname>xmin</varname>" and "<varname>xmax</varname>" are
+ used to determine which row is visible to a transaction. To do
+ this, PostgreSQL needs a data to indicate what transactions are
+ running, which is called the "<emphasis>snapshot</emphasis>".
+ </para>
+ <para>
+ If the creating transaction is not running, visibility of each
+ row depends upon the fact if the creating transaction was
+ committed or aborted. Suppose a row of a table which was created
+ by some transaction and is not deleted yet. If the creating
+ transaction is running, such row is visible to the transaction
+ which created the row, but not visible to other transactions. If
+ the creating transaction is not running and was committed the row
+ is visible. If the transaction was aborted, this row is not
+ visible.
+ </para>
+ <para>
+ Therefore, PostgreSQL needs two kinds of information to determine
+ "which transaction is running" and "if an old transaction was
+ committed or aborted."
+ </para>
+ <para>
+ The former information is obtained as
+ "<emphasis>snapshot</emphasis>." PostgreSQL maintains the latter
+ information as "<filename>CLOG</filename>."
+ </para>
+ <para>
+ PostgreSQL uses all these information to determine which row is
+ visible to a given transaction.
+ </para>
+ </sect2>
+
+ <sect2 id="xc-overview-global-mvcc">
+ <title>Making Transaction Management Global</title>
+&xlonly;
+ <para>
+ In Postgres-XL, the following features of transaction management
+ and visibility checking extracted out from the nodes and pulled
+ into the GTM.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Assigning XID globally to transactions (GXID, Global
+ Transaction ID). This can be done globally to identify each
+ Transactions in the system.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Providing snapshots. GTM collects all the transaction's status
+ (running, committed, aborted etc.) to provide snapshots globally
+ (global snapshot). Please note that each global snapshot
+ includes <varname>GXID</varname> initiated by other
+ Coordinators or Datanodes. This is needed because some older
+ transaction may visit new server after a while. In this case,
+ if <varname>GXID</varname> of such a transaction is not
+ included in the snapshot, this transaction may be regarded as
+ "old enough" and uncommitted rows may be
+ read. If <varname>GXID</varname> of such transaction is
+ included in the snapshot from the beginning, such inconsistency
+ does not take place.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ To do this, <productname>Postgres-XL</productname> introduced a dedicated component called
+ GTM (Global Transaction Manager). GTM runs on one of the servers
+ and provides unique and ordered transaction id to each transaction
+ running on <productname>Postgres-XL</productname> servers. Because this is a globally unique
+ ID, we call this <varname>GXID</varname> (Global Transaction Id).
+ </para>
+ <para>
+ GTM receives <varname>GXID</varname> request from transactions
+ and provide <varname>GXID</varname>. It also keeps track of all
+ the transactions when it started and finished to generate
+ snapshots used to control each tuple visibility. Because snapshots
+ here is also a global property, it is called <emphasis>Global
+ Snapshot</emphasis>.
+ </para>
+ <para>
+ As long as each transaction runs with a <varname>GXID</varname> and
+ a Global Snapshot, it can maintain consistent visibility throughout
+ the system and it is safe to run transactions in parallel in any
+ servers. On the other hand, a transaction, composed of multiple
+ statements, can be executed using multiple servers maintaining
+ database consistency.
+ </para>
+ <para>
+ GTM provides Global Transaction Id to each transaction and keeps
+ track of the status of all the transactions, whether it is
+ running, committed or aborted, to calculate global snapshots to
+ maintain tuple visibility.
+ </para>
+ <para>
+ For this purpose, each transaction reports when it starts and
+ ends, as well as when it issues <command>PREPARE</command>
+ command in two-phase commit protocol.
+ </para>
+ <para>
+ Each transaction requests snapshots according to the transaction
+ isolation level as done in PostgreSQL. If the transaction
+ isolation level is "<emphasis>read committed</emphasis>", then
+ transaction will request a snapshot for each statement. If it is
+ "<emphasis>serializable</emphasis>" transaction will request a
+ snapshot at the beginning of transaction and reuse it thought the
+ transaction.
+ </para>
+ </sect2>
+
+ <sect2 id="xc-overview-gtm-proxy">
+ <title>Improving GTM Performance</title>
+&xlonly;
+ <para>
+ Because GTM can be regarded as "serializing" all the transaction
+ processing, people may think that GTM can be a performance
+ bottleneck.
+ </para>
+
+ <para>
+ In fact, GTM can limit the whole scalability. GTM should not be
+ used in very slow network environment such as wide area
+ network. GTM architecture is intended to be used with Gigabit
+ local network. It is encouraged to install Postgres-XL with a local
+ Gigabit network with minimum latency, that is, use as few
+ switches involved in the connection among GTM, Coordinator and
+ Datanodes.
+ In addition, consider putting all components on their own subnet
+ if you have multiple network ports in the systems.
+ </para>
+
+ <sect3>
+ <title>Primitive GTM Implementation</title>
+
+ <para>
+ Primitive GTM implementation can be done as follows:
+ </para>
+
+ <procedure>
+ <step>
+ <para>
+ The Coordinator backend is provided with a GTM client library to
+ obtain GXID and snapshots and to report the transaction status.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ GTM opens a port to accept connections from each Coordinator and
+ Datanode backend. When GTM accepts a connection, it creates a
+ thread (GTM Thread) to handle requests to GTM from the connected
+ Coordinator backend.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ GTM Thread receives each request, records it and
+ sends <varname>GXID</varname>, <emphasis>snapshot</emphasis>
+ and other response to the Coordinator backend.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ They are repeated until the Coordinator backend requests
+ disconnect.
+ </para>
+ </step>
+ </procedure>
+
+ </sect3>
+
+ <sect3>
+ <title>GTM Proxy Implementation</title>
+
+ <para>
+ Each transaction is issuing
+ requests to GTM frequently. We can collect them into single
+ block of requests in each Coordinator to reduce the amount of
+ interaction by using a <emphasis>GTM-Proxy</emphasis>.
+ </para>
+
+ <para>
+ In this configuration, each Coordinator and Datanode backend
+ does not connect to GTM directly. Instead, we have GTM Proxy
+ between GTM and Coordinator backend to group multiple requests
+ and responses. GTM Proxy, like GTM explained in the previous
+ sections, accepts connections from the Coordinator
+ backend. However, it does not create new thread. The following
+ paragraphs explains how GTM Proxy is initialized and how it
+ handles requests from Coordinator backends.
+ </para>
+
+ <para>
+ GTM Proxy, as well as GTM, is initialized as follows:
+ </para>
+
+ <procedure>
+ <step>
+ <para>
+ GTM starts up normally, but now can accept connections from
+ GTM proxies.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ GTM Proxy starts up. GTM Proxy creates GTM Proxy Threads. Each
+ GTM Proxy Thread connects to the GTM in advance. The number of
+ GTM Proxy Threads can be specified at the startup. A typical
+ number of threads is one or two so it can save the number of
+ connections between GTM and Coordinators.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ GTM Main Thread waits for the request connection from each
+ backend.
+ </para>
+ </step>
+
+ </procedure>
+
+ <para>
+ When each Coordinator backend requests for connection, the Proxy
+ Main Thread assigns a GTM Proxy Thread to handle
+ request. Therefore, one GTM Proxy Thread handles multiple
+ Coordinator backends. If a Coordinator has one hundred
+ Coordinator backends and one GTM Proxy Thread, this thread takes
+ care of one hundred Coordinator backend.
+ </para>
+
+ <para>
+ Then GTM Proxy Thread scans all the requests from Coordinator
+ backend. If Coordinator is busy, it is expected to capture
+ more requests in a single scan. Therefore, the proxy can group
+ many requests into single block of requests, to reduce the
+ number of interaction between GTM and the Coordinator.
+ </para>
+
+ <para>
+ Furthermore, in a single scan, we may have multiple request for
+ snapshots. Because these requests can be regarded as received at
+ the same time, we can represent multiple snapshots with single
+ one. This will reduce the amount of data which GTM provides.
+ </para>
+
+ </sect3>
+ </sect2>
+
+ <sect2 id="xc-overview-Coordinator">
+ <title>Coordinator</title>
+&xlonly;
+ <para>
+ Coordinator handles SQL statements from applications and
+ determines which Datanode should be involved and generates local
+ SQL statements for each Datanode. In the most simplest case, if
+ a single Datanode is involved, the Coordinator simply proxies
+ incoming statements to the Datanode. In more complicated cases,
+ for example, if the target Datanode cannot be determined, then
+ the Coordinator generates local statements for each Datanode,
+ collects the result to materialize at the Coordinator for further
+ handling. In this case, the Coordinator will try to optimize the
+ plan by
+ <itemizedlist>
+ <listitem>
+ <para>
+ Pushdown <command>WHERE</command> clause to Datanodes,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Pushdown <emphasis>joins</emphasis> to Datanodes,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Pushdown <emphasis>projection</emphasis> (column list in <command>SELECT</command> clause),
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Pushdown <command>ORDER BY</command> clause, as well as other clauses.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ If a transaction is involved by more than one Datanodes and/or
+ Coordinators, the Coordinator will handle the transaction with
+ two-phase commit protocol internally.
+ </para>
+
+ <para>
+ In the case of aggregate
+ functions, <productname>Postgres-XL</productname> introduced new
+ function collection function between existing transition function
+ and finalize function. Collection function runs on the
+ Coordinator to collect all the intermediate results from involved
+ Datanodes. For details, see <xref linkend="xaggr">
+ and <xref linkend="SQL-CREATEAGGREGATE">.
+ </para>
+
+ <para>
+ In the case of reading replicated tables, the Coordinator can choose
+ any Datanode to read. The most efficient way is to select one
+ running in the same hardware or virtual machine. This is
+ called <emphasis>preferred Datanode</emphasis> and can be
+ specified by a GUC local to each Coordinator.
+ </para>
+
+ <para>
+ On the other hand, in the case of writing replicated tables, all
+ the Coordinators choose the same Datanode to begin with to avoid
+ update conflicts. This is called <emphasis>primary
+ Datanode</emphasis>.
+ </para>
+
+ <para>
+ Coordinators also take care of DDL statements. Because DDL
+ statements handles system catalogs, which are replicated in all
+ the Coordinators and Datanodes, they are proxied to all the
+ Coordinators and Datanodes. To synchronize the catalog update in
+ all the nodes, the Coordinator handles DDL with two-phase commit
+ protocol internally.
+ </para>
+
+ </sect2>
+
+ <sect2 id="xc-overview-Datanode">
+ <title>Datanode</title>
+&xlonly;
+ <para>
+ While Coordinators handle cluster-wide SQL statements, Datanodes
+ take care of just local issues. In this sense, Datanodes are
+ essentially <productname>PostgreSQL</productname> servers except
+ that transaction management information is obtained from GTM, as
+ well as other global value.
+ </para>
+
+ </sect2>
+
+
+ <sect2 id="xc-overview-pooler">
+ <title>Coordinator And Datanode Connection</title>
+
+ <para>
+ The number of connections between Coordinators and Datanodes may
+ increase from time to time. This may leave unused connection and
+ waste system resources. Repeating real connect and disconnect
+ requires Datanode backend initialization which increases latency
+ and also wastes system resources.
+ </para>
+
+ <para>
+ For example, as in the case of GTM, if each Coordinator has one
+ hundred connections to applications and we have ten Coordinators,
+ after a while, each Coordinator may have connection to each data
+ node. It means that each Coordinator backend has ten connections
+ to Coordinators and each Coordinator has one thousand (10 x 10)
+ connections to Coordinators.
+ </para>
+
+ <para>
+ Because we consume much more resources for locks and other
+ control information per backend and only a few of such connection
+ is active at a given time, it is not a good idea to hold such
+ unused connections between Coordinator and Datanode.
+ </para>
+
+ <para>
+ To improve this, Postgres-XL is equipped with connection pooler
+ between Coordinator and Datanode. When a Coordinator backend
+ requires connection to a Datanode, the pooler looks for
+ appropriate connection from the pool. If there's an available
+ one, the pooler assigns it to the Coordinator backend. When the
+ connection is no longer needed, the Coordinator backend returns
+ the connection to the pooler. The pooler does not disconnect the
+ connection. It keeps the connection to the pool for later reuse,
+ keeping Datanode backend running.
+ </para>
+
+ </sect2>
+
+ </sect1>
+ </chapter>
+<!## end>
diff --git a/doc-xc/src/sgml/array.sgmlin b/doc-xc/src/sgml/array.sgmlin
index bff3440793..2e7220426e 100644
--- a/doc-xc/src/sgml/array.sgmlin
+++ b/doc-xc/src/sgml/array.sgmlin
@@ -14,6 +14,9 @@
<!## XC>
<productname>Postgres-XC</productname> allows columns of a table to be
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows columns of a table to be
+<!## end>
defined as variable-length multidimensional arrays. Arrays of any
built-in or user-defined base type, enum type, or composite type
can be created.
@@ -91,6 +94,9 @@ CREATE TABLE tictactoe (
<!## XC>
As before, however, <productname>Postgres-XC</> does not enforce the
<!## end>
+<!## XL>
+ As before, however, <productname>Postgres-XL</> does not enforce the
+<!## end>
size restriction in any case.
</para>
</sect2>
@@ -123,6 +129,9 @@ CREATE TABLE tictactoe (
<!## XC>
<productname>Postgres-XC</productname> distribution, all use a comma
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> distribution, all use a comma
+<!## end>
(<literal>,</>), except for type <type>box</> which uses a semicolon
(<literal>;</>). Each <replaceable>val</replaceable> is
either a constant of the array element type, or a subarray. An example
@@ -242,6 +251,9 @@ SELECT name FROM sal_emp WHERE pay_by_quarter[1] &lt;&gt; pay_by_quarter[2];
<!## XC>
By default <productname>Postgres-XC</productname> uses a
<!## end>
+<!## XL>
+ By default <productname>Postgres-XL</productname> uses a
+<!## end>
one-based numbering convention for arrays, that is,
an array of <replaceable>n</> elements starts with <literal>array[1]</literal> and
ends with <literal>array[<replaceable>n</>]</literal>.
@@ -627,6 +639,9 @@ SELECT * FROM
<!## XC>
in the <productname>Postgres-XC</productname> distribution, all use a comma,
<!## end>
+<!## XL>
+ in the <productname>Postgres-XL</productname> distribution, all use a comma,
+<!## end>
except for type <type>box</>, which uses a semicolon (<literal>;</>).
In a multidimensional array, each dimension (row, plane,
cube, etc.) gets its own level of curly braces, and delimiters
diff --git a/doc-xc/src/sgml/auto-explain.sgmlin b/doc-xc/src/sgml/auto-explain.sgmlin
index e926a70898..0188053118 100644
--- a/doc-xc/src/sgml/auto-explain.sgmlin
+++ b/doc-xc/src/sgml/auto-explain.sgmlin
@@ -33,8 +33,8 @@ LOAD 'auto_explain';
that.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
To log plans on Datanodes, you must preload this module in each
Datanode. This module will log local plans of each node. For
@@ -43,6 +43,15 @@ LOAD 'auto_explain';
log.
</para>
<!## end>
+<!## XL>
+ <para>
+ To log plans on Datanodes, you must preload this module in each
+ Datanode. This module will log local plans of each node. For
+ example, a Coordinator log will include the plan for Coordinator only.
+ the Corresponding plan in Datanodes will be found in each Datanode's
+ log.
+ </para>
+<!## end>
<sect2>
diff --git a/doc-xc/src/sgml/backup.sgmlin b/doc-xc/src/sgml/backup.sgmlin
index 1f0cab70a4..30950986ee 100644
--- a/doc-xc/src/sgml/backup.sgmlin
+++ b/doc-xc/src/sgml/backup.sgmlin
@@ -114,6 +114,19 @@ pg_dump <replaceable class="parameter">dbname</replaceable> &gt; <replaceable cl
</para>
</important>
<!## end>
+<!## XL>
+&xlonly;
+ <important>
+ <para>
+ In <productname>Postgres-XL</>, <application>pg_dump</>
+ and <application>pg_dumpall</> backs up all the information stored
+ both in Coordinators and Datanodes.
+ That is, it dumps the entire database just like in regular PostgreSQL
+ and outputs similarly. The output will contain additional table
+ distribution information.
+ </para>
+ </important>
+<!## end>
<sect2 id="backup-dump-restore">
@@ -341,6 +354,14 @@ pg_restore -d <replaceable class="parameter">dbname</replaceable> <replaceable c
Coordinator and Datanode manually.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ File system level backup covers only each Coordinator or Datanode.
+ To make file system level backup, you should backup each
+ Coordinator and Datanode manually.
+ </para>
+<!## end>
&common;
<para>
diff --git a/doc-xc/src/sgml/biblio.sgmlin b/doc-xc/src/sgml/biblio.sgmlin
index 8143e23f92..290f28c086 100644
--- a/doc-xc/src/sgml/biblio.sgmlin
+++ b/doc-xc/src/sgml/biblio.sgmlin
@@ -563,6 +563,32 @@ [email protected]
</copyright>
</biblioentry>
<!## end>
+<!## XL>
+ <biblioentry id="OZS91">
+ <title>Principles of Distributed Database Systems</title>
+ <titleabbrev>Ozsu and Valduriez, 1991</titleabbrev>
+ <edition>Second Edition</edition>
+ <authorgroup>
+ <author>
+ <firstname>M. Tamer</firstname>
+ <surname>Ozsu</surname>
+ </author>
+ <author>
+ <firstname>Patrick</firstname>
+ <surname>Valduriez</surname>
+ </author>
+ </authorgroup>
+ <isbn>0-13-659707-6</isbn>
+ <pubdate>1991</pubdate>
+ <publisher>
+ <publishername>Prentice Hall</publishername>
+ </publisher>
+ <copyright>
+ <year>1991, 1999</year>
+ <holder>Prentice-Hall, Inc.</holder>
+ </copyright>
+ </biblioentry>
+<!## end>
</bibliodiv>
</bibliography>
diff --git a/doc-xc/src/sgml/bki.sgmlin b/doc-xc/src/sgml/bki.sgmlin
index c0034947b9..92655d0dfb 100644
--- a/doc-xc/src/sgml/bki.sgmlin
+++ b/doc-xc/src/sgml/bki.sgmlin
@@ -14,6 +14,9 @@
<!## XC>
<productname>Postgres-XC</productname> backend when running in the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> backend when running in the
+<!## end>
<quote>bootstrap</quote> mode. The bootstrap mode allows system catalogs
to be created and filled from scratch, whereas ordinary SQL commands
require the catalogs to exist already.
diff --git a/doc-xc/src/sgml/btree-gist.sgmlin b/doc-xc/src/sgml/btree-gist.sgmlin
index f58a45daf1..c0348648bd 100644
--- a/doc-xc/src/sgml/btree-gist.sgmlin
+++ b/doc-xc/src/sgml/btree-gist.sgmlin
@@ -47,6 +47,12 @@
also provides index support for <literal>&lt;&gt;</literal> (<quote>not
equals</quote>).
<!## end>
+<!## XL>
+ <!-- XL does not support "exclude" constraint now -->
+ In addition to the typical B-tree search operators, <filename>btree_gist</>
+ also provides index support for <literal>&lt;&gt;</literal> (<quote>not
+ equals</quote>).
+<!## end>
</para>
<para>
diff --git a/doc-xc/src/sgml/catalogs.sgmlin b/doc-xc/src/sgml/catalogs.sgmlin
index f8735e8c16..bd949ddd57 100644
--- a/doc-xc/src/sgml/catalogs.sgmlin
+++ b/doc-xc/src/sgml/catalogs.sgmlin
@@ -18,6 +18,9 @@
<!## XC>
<productname>Postgres-XC</productname>'s system catalogs are regular
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s system catalogs are regular
+<!## end>
tables. You can drop and recreate the tables, add columns, insert
and update values, and severely mess up your system that way.
Normally, one should not change the system catalogs by hand, there
@@ -309,6 +312,20 @@
<entry>Postgres-XC cluster node groups (Postgres-XC only)</entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><link linkend="catalog-pgxc-class"><structname>pgxc_class</structname></link></entry>
+ <entry>replication or distribution information of tables (Postgres-XL only)</entry>
+ </row>
+ <row>
+ <entry><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link></entry>
+ <entry>Postgres-XL cluster nodes (Postgres-XC only)</entry>
+ </row>
+ <row>
+ <entry><link linkend="catalog-pgxc-group"><structname>pgxc_group</structname></link></entry>
+ <entry>Postgres-XL cluster node groups (Postgres-XC only)</entry>
+ </row>
+<!## end>
</tbody>
</tgroup>
</table>
@@ -337,7 +354,6 @@
other information that is similar to ordinary functions.
</para>
-&xconly;
<table>
<title><structname>pg_aggregate</> Columns</title>
@@ -371,6 +387,14 @@
<entry>Collection function (Only for Postgres-XC></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><structfield>aggcollectfn</structfield></entry>
+ <entry><type>regproc</type></entry>
+ <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
+ <entry>Collection function (Only for Postgres-XL>)</entry>
+ </row>
+<!## end>
<row>
<entry><structfield>aggfinalfn</structfield></entry>
<entry><type>regproc</type></entry>
@@ -393,6 +417,9 @@
<!## XC>
<entry>Data type of the aggregate function's internal transition and collection (state) data (Revised for Postgres-XC)</entry>
<!## end>
+<!## XL>
+ <entry>Data type of the aggregate function's internal transition and collection (state) data (Revised for Postgres-XL)</entry>
+<!## end>
</row>
<row>
<entry><structfield>agginitval</structfield></entry>
@@ -418,6 +445,19 @@
</entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><structfield>agginitcollect</structfield></entry>
+ <entry><type>text</type></entry>
+ <entry></entry>
+ <entry>
+ The initial value of the collection state. This is a text
+ field containing the initial value in its external string
+ representation. If this field is null, the collection state
+ value starts out null. (Only for Postgres-XL)
+ </entry>
+ </row>
+<!## end>
</tbody>
</tgroup>
</table>
@@ -6634,6 +6674,233 @@
</table>
</sect1>
<!## end>
+<!## XL>
+ <sect1 id="catalog-pgxc-class">
+ <title><structname>pgxc_class</structname></title>
+
+ <indexterm zone="catalog-pgxc-class">
+ <primary>pgxc_class</primary>
+ </indexterm>
+
+&xlonly;
+ <para>
+ The catalog <structname>pgxc_class</structname> stores information
+ whether each table is replicated or distributed, as well as
+ distribution method and the distribution column.
+ </para>
+
+ <table>
+ <title><structname>pgxc_class</> Columns</title>
+
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>References</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><structfield>pcrelid</structfield></entry>
+ <entry><type>oid</type></entry>
+ <entry><link linkend="catalog-pg-class"><structname>pg_class</structname></link><literal>.oid</literal></entry>
+ <entry>OID of the table</entry>
+ </row>
+
+ <row>
+ <entry><structfield>pclocatortype</structfield></entry>
+ <entry><type>char</type></entry>
+ <entry></entry>
+ <entry>
+ Type of locator.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>pcattnum</structfield></entry>
+ <entry><type>int2</type></entry>
+ <entry></entry>
+ <entry>
+ Column number of used as distribution key.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>pchashalgorithm</structfield></entry>
+ <entry><type>int2</type></entry>
+ <entry></entry>
+ <entry>
+ Indicates hashing algorithm used to distribute the tuples.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>pchashbuckets</structfield></entry>
+ <entry><type>int2</type></entry>
+ <entry></entry>
+ <entry>
+ Indicates the number of hash buckets used to distribute duple.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>nodeoids</structfield></entry>
+ <entry><type>oidvector</type></entry>
+ <entry><literal><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.oid</literal></entry>
+ <entry>
+ List of node OIDs where table is located.
+ This list is ordered by <literal><link linkend="catalog-pgxc-node"><structname>
+ pgxc_node</structname></link>.node_name</literal>. This list is then
+ indexed in information in user session cache and reused as a node target list
+ when doing SQL operations on cluster tables.
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="catalog-pgxc-node">
+ <title><structname>pgxc_node</structname></title>
+
+ <indexterm zone="catalog-pgxc-node">
+ <primary>pgxc_node</primary>
+ </indexterm>
+
+&xlonly;
+ <para>
+ The catalog <structname>pgxc_node</structname> stores information
+ about cluster node information, such as connection information with
+ node port and host, node name, primary and preferred nodes.
+ </para>
+
+ <table>
+ <title><structname>pgxc_node</> Columns</title>
+
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>References</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><structfield>node_name</structfield></entry>
+ <entry><type>name</type></entry>
+ <entry></entry>
+ <entry>Name of cluster node</entry>
+ </row>
+
+ <row>
+ <entry><structfield>node_type</structfield></entry>
+ <entry><type>char</type></entry>
+ <entry></entry>
+ <entry>Type of cluster node.
+ It is <literal>C</literal> for a Coordinator.
+ It is <literal>D</literal> for a Datanode.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>node_port</structfield></entry>
+ <entry><type>int4</type></entry>
+ <entry></entry>
+ <entry>Port number of cluster node</entry>
+ </row>
+
+ <row>
+ <entry><structfield>node_host</structfield></entry>
+ <entry><type>name</type></entry>
+ <entry></entry>
+ <entry>Host name or IP number of cluster node</entry>
+ </row>
+
+ <row>
+ <entry><structfield>nodeis_primary</structfield></entry>
+ <entry><type>bool</type></entry>
+ <entry></entry>
+ <entry>Defines if node is a primary node.
+ Only Datanode can be a primary node.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>nodeis_preferred</structfield></entry>
+ <entry><type>bool</type></entry>
+ <entry></entry>
+ <entry>Defines if node is a preferred node.
+ Only a Datanode can be a preferred node.
+ </entry>
+ </row>
+
+ <row>
+ <entry><structfield>node_id</structfield></entry>
+ <entry><type>int4</type></entry>
+ <entry></entry>
+ <entry>Integer node identifier of node.
+ It is generated when node is created.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="catalog-pgxc-group">
+ <title><structname>pgxc_group</structname></title>
+
+ <indexterm zone="catalog-pgxc-group">
+ <primary>pgxc_group</primary>
+ </indexterm>
+
+&xlonly;
+ <para>
+ The catalog <structname>pgxc_group</structname> stores information
+ about cluster node group information, which is a list of cluster node
+ OIDs. Groups can be used as aliases.
+ </para>
+
+ <table>
+ <title><structname>pgxc_group</> Columns</title>
+
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>References</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><structfield>group_name</structfield></entry>
+ <entry><type>name</type></entry>
+ <entry></entry>
+ <entry>Name of cluster node group</entry>
+ </row>
+
+ <row>
+ <entry><structfield>group_members</structfield></entry>
+ <entry><type>oidvector</type></entry>
+ <entry><literal><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.oid</literal></entry>
+ <entry>List of node OIDs of the node group</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+<!## end>
<sect1 id="views-overview">
<title>System Views</title>
diff --git a/doc-xc/src/sgml/charset.sgmlin b/doc-xc/src/sgml/charset.sgmlin
index d22b2e268e..64ef6e8692 100644
--- a/doc-xc/src/sgml/charset.sgmlin
+++ b/doc-xc/src/sgml/charset.sgmlin
@@ -16,6 +16,10 @@
<productname>Postgres-XC</productname> inherits supports of two localization
facilities from <productname>PostgreSQL</>:
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> inherits supports of two localization
+ facilities from <productname>PostgreSQL</>:
+<!## end>
<itemizedlist>
<listitem>
@@ -55,6 +59,9 @@
<!## XC>
formatting, etc. <productname>Postgres-XC</> uses the standard ISO
<!## end>
+<!## XL>
+ formatting, etc. <productname>Postgres-XL</> uses the standard ISO
+<!## end>
C and <acronym>POSIX</acronym> locale facilities provided by the server operating
system. For additional information refer to the documentation of your
system.
@@ -278,6 +285,9 @@ initdb --locale=sv_SE
<!## XC>
<literal>POSIX</> in <productname>Postgres-XC</> is its performance
<!## end>
+<!## XL>
+ <literal>POSIX</> in <productname>Postgres-XL</> is its performance
+<!## end>
impact. It slows character handling and prevents ordinary indexes
from being used by <literal>LIKE</>. For this reason use locales
only if you actually need them.
@@ -290,6 +300,9 @@ initdb --locale=sv_SE
<!## XC>
As a workaround to allow <productname>Postgres-XC</> to use indexes
<!## end>
+<!## XL>
+ As a workaround to allow <productname>Postgres-XL</> to use indexes
+<!## end>
with <literal>LIKE</> clauses under a non-C locale, several custom
operator classes exist. These allow the creation of an index that
performs a strict character-by-character comparison, ignoring
@@ -319,6 +332,9 @@ initdb --locale=sv_SE
<!## XC>
Check that <productname>Postgres-XC</> is actually using the locale
<!## end>
+<!## XL>
+ Check that <productname>Postgres-XL</> is actually using the locale
+<!## end>
that you think it is. The <envar>LC_COLLATE</> and <envar>LC_CTYPE</>
settings are determined when a database is created, and cannot be
changed except by creating a new database. Other locale
@@ -337,6 +353,9 @@ initdb --locale=sv_SE
<!## XC>
<productname>Postgres-XC</>'s locale support.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s locale support.
+<!## end>
</para>
<para>
@@ -356,6 +375,9 @@ initdb --locale=sv_SE
<!## XC>
<productname>Postgres-XC</> speak their preferred language well.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> speak their preferred language well.
+<!## end>
If messages in your language are currently not available or not fully
translated, your assistance would be appreciated. If you want to
help, refer to <xref linkend="nls"> or write to the developers'
@@ -639,6 +661,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
The character set support in <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ The character set support in <productname>Postgres-XL</productname>
+<!## end>
allows you to store text in a variety of character sets (also called
encodings), including
single-byte character sets such as the ISO 8859 series and
@@ -653,6 +678,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
initializing your <productname>Postgres-XC</productname> database
<!## end>
+<!## XL>
+ initializing your <productname>Postgres-XL</productname> database
+<!## end>
cluster using <command>initdb</>. It can be overridden when you
create a database, so you can have multiple
databases each with a different character set.
@@ -680,6 +708,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
for use in <productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ for use in <productname>Postgres-XL</productname>.
+<!## end>
</para>
<table id="charset-table">
@@ -689,6 +720,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
<title><productname>Postgres-XC</productname> Character Sets</title>
<!## end>
+<!## XL>
+ <title><productname>Postgres-XL</productname> Character Sets</title>
+<!## end>
<tgroup cols="6">
<thead>
<row>
@@ -1053,6 +1087,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
<productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>
+<!## end>
JDBC driver does not support <literal>MULE_INTERNAL</>, <literal>LATIN6</>,
<literal>LATIN8</>, and <literal>LATIN10</>.
</para>
@@ -1074,6 +1111,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
<productname>Postgres-XC</productname> will be unable to help you by
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will be unable to help you by
+<!## end>
converting or validating non-ASCII characters.
</para>
</sect2>
@@ -1090,6 +1130,9 @@ SELECT a COLLATE "C" &lt; b COLLATE "POSIX" FROM test1;
<!## XC>
for a <productname>Postgres-XC</productname> cluster. For example,
<!## end>
+<!## XL>
+ for a <productname>Postgres-XL</productname> cluster. For example,
+<!## end>
<screen>
initdb -E EUC_JP
@@ -1157,6 +1200,9 @@ $ <userinput>psql -l</userinput>
<!## XC>
On most modern operating systems, <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ On most modern operating systems, <productname>Postgres-XL</productname>
+<!## end>
can determine which character set is implied by the <envar>LC_CTYPE</>
setting, and it will enforce that only the matching database encoding is
used. On older systems it is your responsibility to ensure that you use
@@ -1172,6 +1218,9 @@ $ <userinput>psql -l</userinput>
<!## XC>
<productname>Postgres-XC</productname> will allow superusers to create
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will allow superusers to create
+<!## end>
databases with <literal>SQL_ASCII</> encoding even when
<envar>LC_CTYPE</> is not <literal>C</> or <literal>POSIX</>. As noted
above, <literal>SQL_ASCII</> does not enforce that the data stored in
@@ -1193,6 +1242,9 @@ $ <userinput>psql -l</userinput>
<!## XC>
<productname>Postgres-XC</productname> supports automatic
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports automatic
+<!## end>
character set conversion between server and client for certain
character set combinations. The conversion information is stored in the
<!## PG>
@@ -1201,6 +1253,9 @@ $ <userinput>psql -l</userinput>
<!## XC>
<literal>pg_conversion</> system catalog. <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <literal>pg_conversion</> system catalog. <productname>Postgres-XL</>
+<!## end>
comes with some predefined conversions, as shown in <xref
linkend="multibyte-translation-table">. You can create a new
conversion using the SQL command <command>CREATE CONVERSION</command>.
@@ -1501,6 +1556,9 @@ $ <userinput>psql -l</userinput>
<!## XC>
tell <productname>Postgres-XC</productname> the character set
<!## end>
+<!## XL>
+ tell <productname>Postgres-XL</productname> the character set
+<!## end>
(encoding) you would like to use in the client. There are several
ways to accomplish this:
diff --git a/doc-xc/src/sgml/citext.sgmlin b/doc-xc/src/sgml/citext.sgmlin
index 5c98bc7b21..26e2fab679 100644
--- a/doc-xc/src/sgml/citext.sgmlin
+++ b/doc-xc/src/sgml/citext.sgmlin
@@ -75,8 +75,6 @@ SELECT * FROM tab WHERE lower(col) = LOWER(?);
<sect2>
<title>How to Use It</title>
-&xconly;
-
<para>
Here's a simple example of usage:
@@ -113,14 +111,37 @@ INSERT INTO users VALUES (5, 'Bj&oslash;rn', md5(random()::text) );
SELECT * FROM users WHERE nick = 'Larry';
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+CREATE TABLE users (
+ id int PRIMARY KEY,
+ nick CITEXT,
+ pass TEXT NOT NULL
+);
+
+INSERT INTO users VALUES (1, 'larry', md5(random()::text) );
+INSERT INTO users VALUES (2, 'Tom', md5(random()::text) );
+INSERT INTO users VALUES (3, 'Damian', md5(random()::text) );
+INSERT INTO users VALUES (4, 'NEAL', md5(random()::text) );
+INSERT INTO users VALUES (5, 'Bj&oslash;rn', md5(random()::text) );
+
+SELECT * FROM users WHERE nick = 'Larry';
+</programlisting>
+<!## end>
The <command>SELECT</> statement will return one tuple, even though
the <structfield>nick</> column was set to <literal>larry</> and the query
was for <literal>Larry</>.
</para>
-&xconly;
<!## XC>
+&xconly;
+ <para>
+ Please note that the column of the type <literal>CITEXT</literal>
+ cannot be the distribution column;
+ </para>
+<!## end>
+<!## XL>
<para>
Please note that the column of the type <literal>CITEXT</literal>
cannot be the distribution column;
diff --git a/doc-xc/src/sgml/client-auth.sgmlin b/doc-xc/src/sgml/client-auth.sgmlin
index ba5cf45ca5..d43d626be3 100644
--- a/doc-xc/src/sgml/client-auth.sgmlin
+++ b/doc-xc/src/sgml/client-auth.sgmlin
@@ -16,6 +16,9 @@
<!## XC>
specifies which <productname>Postgres-XC</productname> database user name it
<!## end>
+<!## XL>
+ specifies which <productname>Postgres-XL</productname> database user name it
+<!## end>
wants to connect as, much the same way one logs into a Unix computer
as a particular user. Within the SQL environment the active database
user name determines access privileges to database objects &mdash; see
@@ -32,6 +35,9 @@
<!## XC>
<productname>Postgres-XC</productname> actually does privilege
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> actually does privilege
+<!## end>
management in terms of <quote>roles</>. In this chapter, we
consistently use <firstterm>database user</> to mean <quote>role with the
<literal>LOGIN</> privilege</quote>.
@@ -53,6 +59,9 @@
<!## XC>
<productname>Postgres-XC</productname> offers a number of different
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> offers a number of different
+<!## end>
client authentication methods. The method used to authenticate a
particular client connection can be selected on the basis of
(client) host address, database, and user.
@@ -65,6 +74,9 @@
<!## XC>
<productname>Postgres-XC</productname> database user names are logically
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database user names are logically
+<!## end>
separate from user names of the operating system in which the server
runs. If all the users of a particular server also have accounts on
the server's machine, it makes sense to assign database user names
@@ -218,6 +230,9 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
<!## XC>
a specific <productname>Postgres-XC</productname> database.
<!## end>
+<!## XL>
+ a specific <productname>Postgres-XL</productname> database.
+<!## end>
Multiple database names can be supplied by separating them with
commas. A separate file containing database names can be specified by
preceding the file name with <literal>@</>.
@@ -240,6 +255,9 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
<!## XC>
in <productname>Postgres-XC</>; a <literal>+</> mark really means
<!## end>
+<!## XL>
+ in <productname>Postgres-XL</>; a <literal>+</> mark really means
+<!## end>
<quote>match any of the roles that are directly or indirectly members
of this role</>, while a name without a <literal>+</> mark matches
only that specific role.)
@@ -416,6 +434,10 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
<productname>Postgres-XC</productname> database server to login as
any <productname>Postgres-XC</productname> user they wish,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database server to login as
+ any <productname>Postgres-XL</productname> user they wish,
+<!## end>
without the need for a password or any other authentication. See <xref
linkend="auth-trust"> for details.
</para>
@@ -781,6 +803,9 @@ local db1,db2,@demodbs all md5
<!## XC>
<productname>Postgres-XC</>'s regular expression syntax.) The regular
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s regular expression syntax.) The regular
+<!## end>
expression can include a single capture, or parenthesized subexpression,
which can then be referenced in the <replaceable>database-username</>
field as <literal>\1</> (backslash-one). This allows the mapping of
@@ -829,6 +854,9 @@ mymap /^(.*)@otherdomain\.com$ guest
<!## XC>
connect as <productname>Postgres-XC</> user <literal>bob</>, not
<!## end>
+<!## XL>
+ connect as <productname>Postgres-XL</> user <literal>bob</>, not
+<!## end>
as <literal>robert</> or anyone else. <literal>ann</> would
only be allowed to connect as <literal>ann</>. User
<literal>bryanh</> would be allowed to connect as either
@@ -868,6 +896,9 @@ omicron bryanh guest1
<!## XC>
<productname>Postgres-XC</productname> assumes that anyone who can
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> assumes that anyone who can
+<!## end>
connect to the server is authorized to access the database with
whatever database user name they specify (even superuser names).
Of course, restrictions made in the <literal>database</> and
@@ -947,6 +978,9 @@ omicron bryanh guest1
<!## XC>
<productname>Postgres-XC</productname> database passwords are
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database passwords are
+<!## end>
separate from operating system user passwords. The password for
each database user is stored in the <literal>pg_authid</> system
catalog. Passwords can be managed with the SQL commands
@@ -976,6 +1010,9 @@ omicron bryanh guest1
<!## XC>
<productname>Postgres-XC</productname> supports
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports
+<!## end>
<productname>GSSAPI</productname> with <productname>Kerberos</productname>
authentication according to RFC 1964. <productname>GSSAPI</productname>
provides automatic authentication (single sign-on) for systems
@@ -999,6 +1036,9 @@ omicron bryanh guest1
<!## XC>
GSSAPI support has to be enabled when <productname>Postgres-XC</> is built;
<!## end>
+<!## XL>
+ GSSAPI support has to be enabled when <productname>Postgres-XL</> is built;
+<!## end>
see <xref linkend="installation"> for more information.
</para>
@@ -1064,6 +1104,9 @@ omicron bryanh guest1
<!## XC>
<productname>Postgres-XC</productname> will use SSPI in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will use SSPI in
+<!## end>
<literal>negotiate</literal> mode, which will use
<productname>Kerberos</productname> when possible and automatically
fall back to <productname>NTLM</productname> in other cases.
@@ -1161,6 +1204,10 @@ omicron bryanh guest1
<productname>Postgres-XC</> supports Kerberos version 5. Kerberos
support has to be enabled when <productname>Postgres-XC</> is built;
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> supports Kerberos version 5. Kerberos
+ support has to be enabled when <productname>Postgres-XL</> is built;
+<!## end>
see <xref linkend="installation"> for more information.
</para>
@@ -1171,6 +1218,9 @@ omicron bryanh guest1
<!## XC>
<productname>Postgres-XC</> operates like a normal Kerberos service.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> operates like a normal Kerberos service.
+<!## end>
The name of the service principal is
<literal><replaceable>servicename</>/<replaceable>hostname</>@<replaceable>realm</></literal>.
</para>
@@ -1190,6 +1240,9 @@ omicron bryanh guest1
<!## XC>
when supporting multiple <productname>Postgres-XC</> installations
<!## end>
+<!## XL>
+ when supporting multiple <productname>Postgres-XL</> installations
+<!## end>
on the same host.
Some Kerberos implementations might also require a different service name,
such as Microsoft Active Directory which requires the service name
@@ -1209,6 +1262,9 @@ omicron bryanh guest1
<!## XC>
Client principals must have their <productname>Postgres-XC</> database user
<!## end>
+<!## XL>
+ Client principals must have their <productname>Postgres-XL</> database user
+<!## end>
name as their first component, for example
<literal>pgusername@realm</>. Alternatively, you can use a user name
mapping to map from the first component of the principal name to the
@@ -1219,6 +1275,9 @@ omicron bryanh guest1
<!## XC>
not checked by <productname>Postgres-XC</>. If you have cross-realm
<!## end>
+<!## XL>
+ not checked by <productname>Postgres-XL</>. If you have cross-realm
+<!## end>
authentication enabled and need to verify the realm, use the
<literal>krb_realm</> parameter, or enable <literal>include_realm</>
and use user name mapping to check the realm.
@@ -1232,6 +1291,9 @@ omicron bryanh guest1
<!## XC>
only readable) by the <productname>Postgres-XC</productname> server
<!## end>
+<!## XL>
+ only readable) by the <productname>Postgres-XL</productname> server
+<!## end>
account. (See also <xref linkend="postgres-user">.) The location
of the key file is specified by the <xref
linkend="guc-krb-server-keyfile"> configuration
@@ -1375,6 +1437,9 @@ omicron bryanh guest1
<!## XC>
Since <productname>Postgres-XC</> knows both <replaceable>X</> and
<!## end>
+<!## XL>
+ Since <productname>Postgres-XL</> knows both <replaceable>X</> and
+<!## end>
<replaceable>Y</> when a physical connection is established, it
can interrogate the ident server on the host of the connecting
client and can theoretically determine the operating system user
@@ -1412,6 +1477,10 @@ omicron bryanh guest1
used when using the ident server with <productname>Postgres-XC</>,
since <productname>Postgres-XC</> does not have any way to decrypt the
<!## end>
+<!## XL>
+ used when using the ident server with <productname>Postgres-XL</>,
+ since <productname>Postgres-XL</> does not have any way to decrypt the
+<!## end>
returned string to determine the actual user name.
</para>
</sect2>
@@ -1532,6 +1601,9 @@ omicron bryanh guest1
<!## XC>
Set to <literal>1</> to make the connection between Postgres-XC and the
<!## end>
+<!## XL>
+ Set to <literal>1</> to make the connection between Postgres-XL and the
+<!## end>
LDAP server use TLS encryption. Note that this only encrypts
the traffic to the LDAP server &mdash; the connection to the client
will still be unencrypted unless SSL is used.
@@ -1660,6 +1732,9 @@ ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
<!## XC>
server. This must have exactly the same value on the Postgres-XC
<!## end>
+<!## XL>
+ server. This must have exactly the same value on the Postgres-XL
+<!## end>
and RADIUS servers. It is recommended that this be a string of
at least 16 characters. This parameter is required.
<note>
@@ -1671,6 +1746,9 @@ ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
<!## XC>
strong if <productname>Postgres-XC</> is built with support for
<!## end>
+<!## XL>
+ strong if <productname>Postgres-XL</> is built with support for
+<!## end>
<productname>OpenSSL</>. In other cases, the transmission to the
RADIUS server should only be considered obfuscated, not secured, and
external security measures should be applied if necessary.
@@ -1790,6 +1868,9 @@ ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
<!## XC>
will fail because the Postgres-XC server is started by a non-root
<!## end>
+<!## XL>
+ will fail because the Postgres-XL server is started by a non-root
+<!## end>
user. However, this is not an issue when PAM is configured to use
LDAP or other authentication methods.
</para>
diff --git a/doc-xc/src/sgml/common.sgmlin b/doc-xc/src/sgml/common.sgmlin
index fd14582b3f..5f18dcc5b4 100644
--- a/doc-xc/src/sgml/common.sgmlin
+++ b/doc-xc/src/sgml/common.sgmlin
@@ -5,3 +5,10 @@ The following description applies both to <productname>Postgres-XC</> and <produ
</para>
</note>
<!## end>
+<!## XL>
+<note>
+<para>
+The following description applies both to <productname>Postgres-XL</> and <productname>PostgreSQL</> if not described explicitly.
+</para>
+</note>
+<!## end>
diff --git a/doc-xc/src/sgml/config.sgmlin b/doc-xc/src/sgml/config.sgmlin
index 21efa8ac45..6a614f69ca 100644
--- a/doc-xc/src/sgml/config.sgmlin
+++ b/doc-xc/src/sgml/config.sgmlin
@@ -7,6 +7,9 @@
<!## XC>
<title>Coordinator and Datanode Configuration</title>
<!## end>
+<!## XL>
+ <title>Coordinator and Datanode Configuration</title>
+<!## end>
<indexterm>
<primary>configuration</primary>
@@ -31,6 +34,15 @@
detail.
</para>
<!## end>
+<!## XL>
+ <para>
+ There are many configuration parameters that affect the behavior of
+ the database system. In the first section of this chapter, we
+ describe how to set configuration parameters for Coordinator and
+ Datanodes. The subsequent sections discuss each parameter in
+ detail.
+ </para>
+<!## end>
<sect1 id="config-setting">
<title>Setting Parameters</title>
@@ -133,6 +145,17 @@ include 'filename'
any changes to their entries in the configuration file will be ignored
until the server is restarted.
<!## end>
+<!## XL>
+ The configuration file is reread whenever the main Coordinator/Datanode process receives a
+ <systemitem>SIGHUP</> signal (which is most easily sent by means
+ of <literal>pg_ctl reload</>). The main Coordinator/Datanode process
+ also propagates this signal to all currently running server
+ processes so that existing sessions also get the new
+ value. Alternatively, you can send the signal to a single server
+ process directly. Some parameters can only be set at server start;
+ any changes to their entries in the configuration file will be ignored
+ until the server is restarted.
+<!## end>
</para>
<para>
@@ -148,6 +171,11 @@ postgres -c log_connections=yes -c log_destination='syslog'
postgres --coordinator -c log_connections=yes -c log_destination='syslog'
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+postgres --coordinator -c log_connections=yes -c log_destination='syslog'
+</programlisting>
+<!## end>
Command-line options override any conflicting settings in
<filename>postgresql.conf</filename>. Note that this means you won't
be able to change the value on-the-fly by editing
@@ -199,6 +227,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
<productname>Postgres-XC</productname> server. Also,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server. Also,
+<!## end>
some <command>SET</command> or <command>ALTER</> parameter modifications
require superuser permission.
</para>
@@ -232,6 +263,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
already mentioned, <productname>Postgres-XC</productname> uses
<!## end>
+<!## XL>
+ already mentioned, <productname>Postgres-XL</productname> uses
+<!## end>
two other manually-edited configuration files, which control
client authentication (their use is discussed in <xref
linkend="client-authentication">). By default, all three
@@ -423,7 +457,18 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
<para>
- In the case of the Coordinator, this parameter determines how many
+ In the case of the Coordinator, this parameter determines how many
+ connections can each Coordinator accept.
+ </para>
+ <para>
+ In the case of the Datanode, number of connection to each
+ Datanode may become as large as <varname>max_connections</>
+ multiplied by the number of Coordinators.
+ </para>
+<!## end>
+<!## XL>
+ <para>
+ In the case of the Coordinator, this parameter determines how many
connections can each Coordinator accept.
</para>
<para>
@@ -448,6 +493,13 @@ SET ENABLE_SEQSCAN TO OFF;
allows. See <xref linkend="sysvipc"> for information on how to
adjust those parameters, if necessary.
<!## end>
+<!## XL>
+ Increasing this parameter might cause <filename>Coordinator</> or <filename>Datanode</>
+ to request more <systemitem class="osname">System V</> shared
+ memory or semaphores than your operating system's default configuration
+ allows. See <xref linkend="sysvipc"> for information on how to
+ adjust those parameters, if necessary.
+<!## end>
</para>
<para>
@@ -489,6 +541,17 @@ SET ENABLE_SEQSCAN TO OFF;
connections will be accepted only for superusers, and no
new replication connections will be accepted.
<!## end>
+<!## XL>
+ Determines the number of connection <quote>slots</quote> that
+ are reserved for connections by <filename>Coordinator</> or <filename>Datanode</>
+ superusers. At most <xref linkend="guc-max-connections">
+ connections can ever be active simultaneously. Whenever the
+ number of active concurrent connections is at least
+ <varname>max_connections</> minus
+ <varname>superuser_reserved_connections</varname>, new
+ connections will be accepted only for superusers, and no
+ new replication connections will be accepted.
+<!## end>
</para>
<para>
@@ -930,6 +993,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
because <productname>Postgres-XC</productname> also relies on the
<!## end>
+<!## XL>
+ because <productname>Postgres-XL</productname> also relies on the
+<!## end>
operating system cache, it is unlikely that an allocation of more than
40% of RAM to <varname>shared_buffers</varname> will work better than a
smaller amount. Larger settings for <varname>shared_buffers</varname>
@@ -956,6 +1022,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
Increasing this parameter might cause <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Increasing this parameter might cause <productname>Postgres-XL</>
+<!## end>
to request more <systemitem class="osname">System V</> shared
memory than your operating system's default configuration
allows. See <xref linkend="sysvipc"> for information on how to
@@ -1023,6 +1092,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
Increasing this parameter might cause <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Increasing this parameter might cause <productname>Postgres-XL</>
+<!## end>
to request more <systemitem class="osname">System V</> shared
memory than your operating system's default configuration
allows. See <xref linkend="sysvipc"> for information on how to
@@ -1044,6 +1116,15 @@ SET ENABLE_SEQSCAN TO OFF;
this value as the same value as <varname>max_connections</>.
</para>
<!## end>
+<!## XL>
+ <para>
+ Even though your application does not issue <command>PREPARE
+ TRANSACTION</> explicitly, Coordinator may generate this
+ command when an updating transaction involves more than one
+ Coordinators and Datanodes. For Datanodes, you should specify
+ this value as the same value as <varname>max_connections</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -1128,6 +1209,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
<productname>Postgres-XC</productname> can determine the kernel limit,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can determine the kernel limit,
+<!## end>
the server will not allow this variable to be set to an unsafe
value. However, not all platforms provide the information,
so caution is recommended in selecting a value.
@@ -1195,6 +1279,13 @@ SET ENABLE_SEQSCAN TO OFF;
<literal>XXX</literal> is <literal>pgsql</>, <literal>perl</>,
<literal>tcl</>, or <literal>python</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> procedural language
+ libraries can be preloaded in this way, typically by using the
+ syntax <literal>'$libdir/plXXX'</literal> where
+ <literal>XXX</literal> is <literal>pgsql</>, <literal>perl</>,
+ <literal>tcl</>, or <literal>python</>.
+<!## end>
</para>
<para>
@@ -1233,8 +1324,14 @@ SET ENABLE_SEQSCAN TO OFF;
<!## end>
<!## XC>
Every Postgres-XC-supported library has a <quote>magic
- block</> that is checked to guarantee compatibility.
- For this reason, non-Postgres-XC libraries cannot be
+ block</> that is checked to guarantee compatibility.
+ For this reason, non-Postgres-XC libraries cannot be
+ loaded in this way.
+<!## end>
+<!## XL>
+ Every Postgres-XL-supported library has a <quote>magic
+ block</> that is checked to guarantee compatibility.
+ For this reason, non-Postgres-XL libraries cannot be
loaded in this way.
<!## end>
</para>
@@ -1595,6 +1692,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
If this parameter is on, the <productname>Postgres-XC</> server
<!## end>
+<!## XL>
+ If this parameter is on, the <productname>Postgres-XL</> server
+<!## end>
will try to make sure that updates are physically written to
disk, by issuing <function>fsync()</> system calls or various
equivalent methods (see <xref linkend="guc-wal-sync-method">).
@@ -1757,6 +1857,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
When this parameter is on, the <productname>Postgres-XC</> server
<!## end>
+<!## XL>
+ When this parameter is on, the <productname>Postgres-XL</> server
+<!## end>
writes the entire content of each disk page to WAL during the
first modification of that page after a checkpoint.
This is needed because
@@ -1830,6 +1933,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
Increasing this parameter might cause <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Increasing this parameter might cause <productname>Postgres-XL</>
+<!## end>
to request more <systemitem class="osname">System V</> shared
memory than your operating system's default configuration
allows. See <xref linkend="sysvipc"> for information on how to
@@ -2085,6 +2191,13 @@ SET ENABLE_SEQSCAN TO OFF;
and the use of this entirely to users.
</para>
<!## end>
+<!## XL>
+&pgonly;
+ <para>
+ Streaming replication only been thoroughly tested in asynchronous mode
+ with <productname>Postgres-XL</productname>.
+ </para>
+<!## end>
<para>
These settings control the behavior of the built-in
@@ -2600,87 +2713,6 @@ SET ENABLE_SEQSCAN TO OFF;
</listitem>
</varlistentry>
-<!## XC>
- <varlistentry id="guc-enable-fastqueryshipping" xreflabel="enable_fast_query_shipping">
- <term><varname>enable_fast_query_shipping</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_fast_query_shipping</> configuration parameter</primary>
- </indexterm>
- <listitem>
-&xconly;
- <para>
- Enables or disables the query planner's use of fast query shipping
- steps. When disabled, queries that could be completely shipped to remote
- nodes are planned through the standard planner instead. The default
- is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-remotejoin" xreflabel="enable_remotejoin">
- <term><varname>enable_remotejoin</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_remotejoin</> configuration parameter</primary>
- </indexterm>
- <listitem>
-&xconly;
- <para>
- Enables or disables the query planner's use of remote join shippability
- steps. When disabled, joins that could be shipped to remote nodes are
- evaluated on local node instead. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-remotegroup" xreflabel="enable_remotegroup">
- <term><varname>enable_remotegroup</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_remotegroup</> configuration parameter</primary>
- </indexterm>
- <listitem>
-&xconly;
- <para>
- Enables or disables the query planner's use of remote <literal>GROUP
- BY</> shippability steps. When disabled, <literal>GROUP BY</> clauses
- that could be shipped to remote nodes are evaluated on local node
- instead. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-remotelimit" xreflabel="enable_remotelimit">
- <term><varname>enable_remotelimit</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_remotelimit</> configuration parameter</primary>
- </indexterm>
- <listitem>
-&xconly;
- <para>
- Enables or disables the query planner's use of remote <literal>LIMIT</>
- shippability steps. When disabled, <literal>LIMIT</> clauses that
- could be shipped to remote nodes are fully evaluated on local node
- instead. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="guc-enable-remotesort" xreflabel="enable_remotesort">
- <term><varname>enable_remotesort</varname> (<type>boolean</type>)</term>
- <indexterm>
- <primary><varname>enable_remotesort</> configuration parameter</primary>
- </indexterm>
- <listitem>
-&xconly;
- <para>
- Enables or disables the query planner's use of remote <literal>ORDER BY</>
- shippability steps. When disabled, <literal>ORDER BY</> clauses that
- could be shipped to remote nodes are fully evaluated on local node
- instead. The default is <literal>on</>.
- </para>
- </listitem>
- </varlistentry>
-<!## end>
-
</variablelist>
</sect2>
<sect2 id="runtime-config-query-constants">
@@ -2829,6 +2861,11 @@ SET ENABLE_SEQSCAN TO OFF;
portion of the kernel's disk cache that will be used for
<productname>Postgres-XC</productname> data files. Also, take
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s shared buffers and the
+ portion of the kernel's disk cache that will be used for
+ <productname>Postgres-XL</productname> data files. Also, take
+<!## end>
into account the expected number of concurrent queries on different
tables, since they will have to share the available
space. This parameter has no effect on the size of shared
@@ -2838,6 +2875,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
memory allocated by <productname>Postgres-XC</productname>, nor
<!## end>
+<!## XL>
+ memory allocated by <productname>Postgres-XL</productname>, nor
+<!## end>
does it reserve kernel disk cache; it is used only for estimation
purposes. The system also does not assume data remains in
the disk cache between queries. The default is 128 megabytes
@@ -3019,6 +3059,9 @@ SET ENABLE_SEQSCAN TO OFF;
<!## XC>
on the use of statistics by the <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ on the use of statistics by the <productname>Postgres-XL</>
+<!## end>
query planner, refer to <xref linkend="planner-stats">.
</para>
</listitem>
@@ -3195,6 +3238,9 @@ SELECT * FROM parent WHERE key = 2400;
<!## XC>
<productname>Postgres-XC</productname> supports several methods
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports several methods
+<!## end>
for logging server messages, including
<systemitem>stderr</systemitem>, <systemitem>csvlog</systemitem> and
<systemitem>syslog</systemitem>. On Windows,
@@ -3226,6 +3272,9 @@ SELECT * FROM parent WHERE key = 2400;
<!## XC>
<varname>log_destination</>. <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <varname>log_destination</>. <productname>Postgres-XL</productname>
+<!## end>
can log to <application>syslog</application> facilities
<literal>LOCAL0</> through <literal>LOCAL7</> (see <xref
linkend="guc-syslog-facility">), but the default
@@ -3318,6 +3367,9 @@ local0.* /var/log/postgresql
<!## XC>
present, <productname>Postgres-XC</productname> would append
<!## end>
+<!## XL>
+ present, <productname>Postgres-XL</productname> would append
+<!## end>
the epoch of the new log file's creation time, but this is no
longer the case.
</para>
@@ -3420,6 +3472,9 @@ local0.* /var/log/postgresql
<!## XC>
this parameter will cause <productname>Postgres-XC</productname> to truncate (overwrite),
<!## end>
+<!## XL>
+ this parameter will cause <productname>Postgres-XL</productname> to truncate (overwrite),
+<!## end>
rather than append to, any existing log file of the same name.
However, truncation will occur only when a new file is being opened
due to time-based rotation, not during server startup or size-based
@@ -3490,6 +3545,9 @@ local0.* /var/log/postgresql
<!## XC>
<productname>Postgres-XC</productname> messages in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> messages in
+<!## end>
<application>syslog</application> logs. The default is
<literal>postgres</literal>.
This parameter can only be set in the <filename>postgresql.conf</>
@@ -3656,6 +3714,9 @@ local0.* /var/log/postgresql
<!## XC>
severity levels used by <productname>Postgres-XC</>. If logging output
<!## end>
+<!## XL>
+ severity levels used by <productname>Postgres-XL</>. If logging output
+<!## end>
is sent to <systemitem>syslog</systemitem> or Windows'
<systemitem>eventlog</systemitem>, the severity levels are translated
as shown in the table.
@@ -4229,6 +4290,9 @@ FROM pg_stat_activity;
<!## XC>
location of the error in the Postgres-XC source code
<!## end>
+<!## XL>
+ location of the error in the Postgres-XL source code
+<!## end>
(if <varname>log_error_verbosity</> is set to <literal>verbose</>),
and application name.
Here is a sample table definition for storing CSV-format log output:
@@ -4839,6 +4903,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<!## XC>
<productname>Postgres-XC</> will automatically use the default
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> will automatically use the default
+<!## end>
tablespace of the current database. If a nondefault tablespace
is specified, the user must have <literal>CREATE</> privilege
for it, or creation attempts will fail.
@@ -4885,6 +4952,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<!## XC>
one name in the list, <productname>Postgres-XC</> chooses a random
<!## end>
+<!## XL>
+ one name in the list, <productname>Postgres-XL</> chooses a random
+<!## end>
member of the list each time a temporary object is to be created;
except that within a transaction, successively created temporary
objects are placed in successive tablespaces from the list.
@@ -4895,6 +4965,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<!## XC>
<productname>Postgres-XC</> will automatically use the default
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> will automatically use the default
+<!## end>
tablespace of the current database instead.
</para>
@@ -4936,7 +5009,17 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<note>
<para>
In <productname>Postgres-XC</> setting <varname>check_function_bodies</varname>
- to <literal>off</> is not recomended. If SQL functions are created after setting
+ to <literal>off</> is not recommended. If SQL functions are created after setting
+ <varname>check_function_bodies</varname> to <literal>off</>, the behaviour of the
+ function when executed is un-defined.
+ </para>
+ </note>
+<!## end>
+<!## XL>
+ <note>
+ <para>
+ In <productname>Postgres-XL</> setting <varname>check_function_bodies</varname>
+ to <literal>off</> is not recommended. If SQL functions are created after setting
<varname>check_function_bodies</varname> to <literal>off</>, the behaviour of the
function when executed is un-defined.
</para>
@@ -5128,6 +5211,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<!## XC>
and <literal>escape</literal> (the traditional Postgres-XC
<!## end>
+<!## XL>
+ and <literal>escape</literal> (the traditional Postgres-XL
+<!## end>
format). See <xref linkend="datatype-binary"> for more
information. The <type>bytea</type> type always
accepts both formats on input, regardless of this setting.
@@ -5195,6 +5281,9 @@ SET XML OPTION { DOCUMENT | CONTENT };
<!## XC>
This syntax is also available in Postgres-XC.
<!## end>
+<!## XL>
+ This syntax is also available in Postgres-XL.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -5482,6 +5571,9 @@ SET XML OPTION { DOCUMENT | CONTENT };
<!## XC>
compiled-in <productname>Postgres-XC</productname> package
<!## end>
+<!## XL>
+ compiled-in <productname>Postgres-XL</productname> package
+<!## end>
library directory is substituted for <literal>$libdir</literal>; this
is where the modules provided by the standard
<!## PG>
@@ -5490,6 +5582,9 @@ SET XML OPTION { DOCUMENT | CONTENT };
<!## XC>
<productname>Postgres-XC</productname> distribution are installed.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> distribution are installed.
+<!## end>
(Use <literal>pg_config --pkglibdir</literal> to find out the name of
this directory.) For example:
<programlisting>
@@ -5644,6 +5739,18 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
involved.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> does not detect global deadlocks
+ where multiple node (Coordinators and/or Datanodes) are
+ involved. To get around this it is recommended to set
+ <varname>statement_timeout</varname> to cause those statements to
+ fail in a normal processing environment. If however, it is a reporting
+ environment, you may want to set this higher globally, or just for
+ the session temporarily.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -5677,6 +5784,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
Increasing this parameter might cause <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Increasing this parameter might cause <productname>Postgres-XL</>
+<!## end>
to request more <systemitem class="osname">System V</> shared
memory than your operating system's default configuration
allows. See <xref linkend="sysvipc"> for information on how to
@@ -5777,6 +5887,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
<productname>Postgres-XC</> has historically also accepted
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> has historically also accepted
+<!## end>
<literal>\'</>. However, use of <literal>\'</> creates security risks
because in some client character set encodings, there are multibyte
characters in which the last byte is numerically equivalent to ASCII
@@ -6068,6 +6181,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
when <productname>Postgres-XC</productname> is compiled or when it is
<!## end>
+<!## XL>
+ when <productname>Postgres-XL</productname> is compiled or when it is
+<!## end>
installed. As such, they have been excluded from the sample
<filename>postgresql.conf</> file. These options report
<!## PG>
@@ -6076,6 +6192,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
various aspects of <productname>Postgres-XC</productname> behavior
<!## end>
+<!## XL>
+ various aspects of <productname>Postgres-XL</productname> behavior
+<!## end>
that might be of interest to certain applications, particularly
administrative front-ends.
</para>
@@ -6120,6 +6239,13 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
when building <productname>Postgres-XC</>. The default value is
<literal>on</literal>.
<!## end>
+<!## XL>
+ Reports whether <productname>Postgres-XL</> was built with
+ support for 64-bit-integer dates and times. This can be
+ disabled by configuring with <literal>--disable-integer-datetimes</>
+ when building <productname>Postgres-XL</>. The default value is
+ <literal>on</literal>.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -6302,6 +6428,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
<productname>Postgres-XC</productname> to be added by add-on modules
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> to be added by add-on modules
+<!## end>
(such as procedural languages). This allows add-on modules to be
configured in the standard ways.
</para>
@@ -6324,6 +6453,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
<!## XC>
to <productname>Postgres-XC</productname> proper but used by some
<!## end>
+<!## XL>
+ to <productname>Postgres-XL</productname> proper but used by some
+<!## end>
add-on module. Such variables must have names consisting of a class
name, a dot, and a variable name. <varname>custom_variable_classes</>
specifies all the class names in use in a particular installation.
@@ -6374,6 +6506,9 @@ plruby.use_strict = true # generates error: unknown class name
<!## XC>
<productname>Postgres-XC</productname> source code, and in some cases
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> source code, and in some cases
+<!## end>
to assist with recovery of severely damaged databases. There
should be no reason to use them on a production database.
As such, they have been excluded from the sample
@@ -6413,6 +6548,9 @@ plruby.use_strict = true # generates error: unknown class name
<!## XC>
must be defined when <productname>Postgres-XC</productname> is
<!## end>
+<!## XL>
+ must be defined when <productname>Postgres-XL</productname> is
+<!## end>
built (accomplished by the <command>configure</command> option
<option>--enable-cassert</option>). Note that
<varname>debug_assertions</varname> defaults to <literal>on</>
@@ -6422,6 +6560,9 @@ plruby.use_strict = true # generates error: unknown class name
<!## XC>
if <productname>Postgres-XC</productname> has been built with
<!## end>
+<!## XL>
+ if <productname>Postgres-XL</productname> has been built with
+<!## end>
assertions enabled.
</para>
</listitem>
@@ -6533,6 +6674,9 @@ plruby.use_strict = true # generates error: unknown class name
<!## XC>
was defined when <productname>Postgres-XC</productname> was compiled.
<!## end>
+<!## XL>
+ was defined when <productname>Postgres-XL</productname> was compiled.
+<!## end>
(However, <symbol>TRACE_SORT</symbol> is currently defined by default.)
</para>
</listitem>
@@ -6578,6 +6722,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6602,6 +6749,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6629,6 +6779,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6652,6 +6805,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6674,6 +6830,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6697,6 +6856,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
<!## XC>
@@ -6707,6 +6869,14 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
involved.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> does not detect global deadlocks
+ where multiple node (Coordinators and/or Datanodes) are
+ involved.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -6728,6 +6898,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
macro was defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ macro was defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6748,6 +6921,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
defined when <productname>Postgres-XC</productname> was
<!## end>
+<!## XL>
+ defined when <productname>Postgres-XL</productname> was
+<!## end>
compiled.
</para>
</listitem>
@@ -6767,6 +6943,9 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
<!## XC>
<productname>Postgres-XC</> to report an error, aborting the current
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> to report an error, aborting the current
+<!## end>
transaction. Setting <varname>zero_damaged_pages</> to on causes
the system to instead report a warning, zero out the damaged
page in memory, and continue processing. This behavior <emphasis>will destroy data</>,
@@ -7075,5 +7254,275 @@ Postgres-XC Specific Parameters
</sect1>
<!## end>
+<!## XL>
+<!--
+Postgres-XL Specific Parameters
+-->
+ <sect1 id="pg-xc-specifics">
+ <title>Postgres-XL Specific Parameters</title>
+&xlonly;
+ <para>
+ Because <productname>Postgres-XL</> distributes data into multiple
+ Datanodes and multiple Coordinators can accept transactions in
+ parallel, the Coordinators must know what Coordinators and
+ Datanodes to connect to. The Coordinators and Datanodes also must know
+ where they can request transaction information. The following
+ describes these additional GUC parameters.
+ </para>
+
+ <variablelist>
+
+ <varlistentry id="guc-max-pool-size" xreflabel="max_pool_size">
+ <term><varname>max_pool_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_pool_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specify the maximum connection pool of the Coordinator to Datanodes.
+ Because each transaction can be involved by all the Datanodes,
+ this parameter should at least be <varname>max_connections</>
+ multiplied by number of Datanodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-min-pool-size" xreflabel="min_pool_size">
+ <term><varname>min_pool_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>min_pool_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Minumum number of the connection from the Coordinator to Datanodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-pool-maintenance-timeout" xreflabel="pool_maintenance_timeout">
+ <term><varname>pool_maintenance_timeout</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>pool_maintenance_timeout</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This parameter specifies how long to wait until pooler
+ maintenance is performed. During such maintenance,
+ old idle connections are discarded.
+ This parameter is useful in multi-tenant environments where
+ many connections to many different databases may be used,
+ so that idle connections may cleaned up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-remote-query-cost" xreflabel="remote_query_cost">
+ <term><varname>remote_query_cost</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>remote_query_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This parameter specifies the cost overhead of setting up
+ a remote query to obtain remote data. It is used by
+ the planner in costing queries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-network-byte-cost" xreflabel="network_byte_cost">
+ <term><varname>network_byte_cost</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>network_byte_cost</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This parameter is used in query cost planning to
+ estimate the cost involved in row shipping and obtaining
+ remote data based on the expected data size.
+ Row shipping is expensive and adds latency, so this
+ setting helps to favor plans that minimizes row shipping.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-sequence-range" xreflabel="sequence_range">
+ <term><varname>sequence_range</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>sequence_range</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ This parameter is used to get several sequence values
+ at once from GTM. This greatly speeds up COPY and INSERT SELECT
+ operations where the target table uses sequences.
+ <productname>Postgres-XL</productname> will not use this entire
+ amount at once, but will increase the request size over
+ time if many requests are done in a short time frame in
+ the same session.
+ After a short time without any sequence requests, decreases back down to 1.
+ Note that any settings here are overriden if the CACHE clause was
+ used in <xref linkend='sql-createsequence'> or <xref linkend='sql-altersequence'>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-coordinators" xreflabel="max_coordinators">
+ <term><varname>max_coordinators</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_coordinators</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Maximum number of Coordinators that can be configured in the cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-max-datanodes" xreflabel="max_datanodes">
+ <term><varname>max_datanodes</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>max_datanodes</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Maximum number of Datanodes that can be configured in the cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-pgxc-node-name" xreflabel="pgxc_node_name">
+ <term><varname>pgxc_node_name</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>pgxc_node_name</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the node name. A node uses this parameter to identify itself
+ with <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname>
+ </link>.nodename
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-pooler-port" xreflabel="pooler_port">
+ <term><varname>pooler_port</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>pooler_port</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the port number assigned to the connection pooler process.
+ This is used in both the Coordinator and Datanode processes to
+ connect to other nodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-gtm-host" xreflabel="gtm_host">
+ <term><varname>gtm_host</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>gtm_host</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the host name or IP address of the <filename>GTM</>. If you use <filename>GTM-Proxy</>, specify the <filename>GTM-Proxy</>'s one.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-gtm-port" xreflabel="gtm_port">
+ <term><varname>gtm_port</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>gtm_port</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifieis the port number of GTM.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-xc-maintenance-mode" xreflabel="xc_maintenance_mode">
+ <term><varname>xc_maintenance_mode</varname> (<type>bool</type>)</term>
+ <indexterm>
+ <primary><varname>xc_maintenance_mode</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specify to enter into maintenance mode. Turning this parameter to on will
+ change behavior of several statements. Each statement
+ behavior may not be compatible in future releases, so users
+ must be extremely careful when they attempt to set this
+ value to <literal>on</literal>.
+ </para>
+ <para>
+ Behavior of <xref linkend="sql-commit-prepared"> and
+ <xref linkend="sql-rollback-prepared"> statements are affected by
+ this parameter.
+ </para>
+ <para>
+ If this is set to ON, you can do maintenance work to update
+ Datanode locally through <literal>EXECUTE DIRECT</literal> or connecting
+ directly to Datanodes. As a DBA, you are totally responsible to any side
+ effects. You must be extremely careful not to bring in any inconsistencies
+ to Postgres-XL database cluster.
+ </para>
+ <para>
+ This parameter can only be set by superuser
+ with <literal>SET</literal> command. Otherwise, the setting
+ will be ignored.
+ </para>
+ <para>
+ As a session parameter, this parameter is shared among all
+ the connections of the session. It affects originating Coordinator as
+ well as remote nodes involved in session.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-shared-queues" xreflabel="shared_queues">
+ <term><varname>shared_queues</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>shared_queues</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Datanode Only
+ </para>
+ <para>
+ For some joins that occur in queries, data from one Datanode may
+ need to be joined with data from another Datanode.
+ <productname>Postgres-XL</productname> uses shared queues for this purpose.
+ During execution each Datanode knows if it needs to produce or consume
+ tuples, or both.
+ </para>
+ <para>
+ Note that there may be mulitple shared_queues used even for a single
+ query. So a value should be set taking into account the number of
+ connections it can accept and expected number of such joins occurring
+ simultaneously.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-shared-queue-size" xreflabel="shared_queue_size">
+ <term><varname>shared_queue_size</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>shared_queue_size</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Datanode Only
+ </para>
+ <para>
+ This parameter sets the size of each each shared queue allocated.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </sect1>
+<!## end>
</chapter>
diff --git a/doc-xc/src/sgml/contrib.sgmlin b/doc-xc/src/sgml/contrib.sgmlin
index 76471fa10e..d53edfeb4d 100644
--- a/doc-xc/src/sgml/contrib.sgmlin
+++ b/doc-xc/src/sgml/contrib.sgmlin
@@ -127,6 +127,13 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged;
&pgupgrade;
<!## XC>
&pgxcclean;
+ &pgxcctl;
+ &pgxcddl;
+ &pgxcmonitor;
+<!## end>
+<!## XL>
+ &pgxcclean;
+ &pgxcctl;
&pgxcddl;
&pgxcmonitor;
<!## end>
diff --git a/doc-xc/src/sgml/datatype.sgmlin b/doc-xc/src/sgml/datatype.sgmlin
index 38ea4c6b65..0e7ad9606e 100644
--- a/doc-xc/src/sgml/datatype.sgmlin
+++ b/doc-xc/src/sgml/datatype.sgmlin
@@ -26,6 +26,12 @@
<productname>Postgres-XC</productname> using the <xref
linkend="sql-createtype"> command.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> inherits from a rich set of native data
+ types available to users. Users can add new types to
+ <productname>Postgres-XL</productname> using the <xref
+ linkend="sql-createtype"> command.
+<!## end>
</para>
<para>
@@ -38,6 +44,9 @@
<!## XC>
<productname>Postgres-XC</productname> for historical reasons. In
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> for historical reasons. In
+<!## end>
addition, some internally used or deprecated types are available,
but are not listed here.
</para>
@@ -307,6 +316,9 @@
<!## XC>
to <productname>Postgres-XC</productname>, such as geometric
<!## end>
+<!## XL>
+ to <productname>Postgres-XL</productname>, such as geometric
+<!## end>
paths, or have several possible formats, such as the date
and time types.
Some of the input and output functions are not invertible, i.e.,
@@ -603,6 +615,9 @@ NUMERIC
<!## XC>
indexes, <productname>Postgres-XC</> treats <literal>NaN</>
<!## end>
+<!## XL>
+ indexes, <productname>Postgres-XL</> treats <literal>NaN</>
+<!## end>
values as equal, and greater than all non-<literal>NaN</>
values.
</para>
@@ -730,6 +745,9 @@ NUMERIC
<!## XC>
in tree-based indexes, <productname>Postgres-XC</> treats
<!## end>
+<!## XL>
+ in tree-based indexes, <productname>Postgres-XL</> treats
+<!## end>
<literal>NaN</> values as equal, and greater than all
non-<literal>NaN</> values.
</para>
@@ -742,6 +760,9 @@ NUMERIC
<!## XC>
<productname>Postgres-XC</productname> also supports the SQL-standard
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also supports the SQL-standard
+<!## end>
notations <type>float</type> and
<type>float(<replaceable>p</replaceable>)</type> for specifying
inexact numeric types. Here, <replaceable>p</replaceable> specifies
@@ -752,6 +773,9 @@ NUMERIC
<!## XC>
<productname>Postgres-XC</productname> accepts
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> accepts
+<!## end>
<type>float(1)</type> to <type>float(24)</type> as selecting the
<type>real</type> type, while
<type>float(25)</type> to <type>float(53)</type> select
@@ -1024,6 +1048,9 @@ SELECT '52093.89'::money::numeric::float8;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
<para>
@@ -1066,6 +1093,9 @@ SELECT '52093.89'::money::numeric::float8;
<!## XC>
latter is a <productname>Postgres-XC</>, as well as <productname>PostgreSQL</> extension.
<!## end>
+<!## XL>
+ latter is a <productname>Postgres-XL</>, as well as <productname>PostgreSQL</> extension.
+<!## end>
</para>
<para>
@@ -1075,6 +1105,9 @@ SELECT '52093.89'::money::numeric::float8;
<!## XC>
In addition, <productname>Postgres-XC</productname> provides the
<!## end>
+<!## XL>
+ In addition, <productname>Postgres-XL</productname> provides the
+<!## end>
<type>text</type> type, which stores strings of any length.
Although the type <type>text</type> is not in the
<acronym>SQL</acronym> standard, several other SQL database
@@ -1127,6 +1160,9 @@ SELECT '52093.89'::money::numeric::float8;
<!## XC>
<productname>Postgres-XC</productname>; in fact
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>; in fact
+<!## end>
<type>character(<replaceable>n</>)</type> is usually the slowest of
the three because of its additional storage costs. In most situations
<type>text</type> or <type>character varying</type> should be used
@@ -1189,6 +1225,9 @@ SELECT b, char_length(b) FROM test2;
<!## XC>
<productname>Postgres-XC</productname>, shown in <xref
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, shown in <xref
+<!## end>
linkend="datatype-character-special-table">. The <type>name</type>
type exists <emphasis>only</emphasis> for the storage of identifiers
in the internal system catalogs and is not intended for use by the general user. Its
@@ -1290,6 +1329,9 @@ SELECT b, char_length(b) FROM test2;
<!## XC>
input and output: <productname>Postgres-XC</productname>'s historical
<!## end>
+<!## XL>
+ input and output: <productname>Postgres-XL</productname>'s historical
+<!## end>
<quote>escape</quote> format, and <quote>hex</quote> format. Both
of these are always accepted on input. The output format depends
on the configuration parameter <xref linkend="guc-bytea-output">;
@@ -1346,6 +1388,9 @@ SELECT E'\\xDEADBEEF';
<!## XC>
<productname>Postgres-XC</productname> format for the <type>bytea</type>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> format for the <type>bytea</type>
+<!## end>
type. It
takes the approach of representing a binary string as a sequence
of ASCII characters, while converting those bytes that cannot be
@@ -1444,6 +1489,9 @@ SELECT E'\\xDEADBEEF';
<!## XC>
phases in the <productname>Postgres-XC</productname> server.
<!## end>
+<!## XL>
+ phases in the <productname>Postgres-XL</productname> server.
+<!## end>
The first backslash of each pair is interpreted as an escape
character by the string-literal parser (assuming escape string
syntax is used) and is therefore consumed, leaving the second backslash of the
@@ -1521,6 +1569,9 @@ SELECT E'\\xDEADBEEF';
<!## XC>
Depending on the front end to <productname>Postgres-XC</> you use,
<!## end>
+<!## XL>
+ Depending on the front end to <productname>Postgres-XL</> you use,
+<!## end>
you might have additional work to do in terms of escaping and
unescaping <type>bytea</type> strings. For example, you might also
have to escape line feeds and carriage returns if your interface
@@ -1571,6 +1622,9 @@ SELECT E'\\xDEADBEEF';
<!## XC>
<productname>Postgres-XC</productname> supports the full set of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports the full set of
+<!## end>
<acronym>SQL</acronym> date and time types, shown in <xref
linkend="datatype-datetime-table">. The operations available
on these data types are described in
@@ -1653,6 +1707,9 @@ SELECT E'\\xDEADBEEF';
<!## XC>
zone</type>, and <productname>Postgres-XC</productname> honors that
<!## end>
+<!## XL>
+ zone</type>, and <productname>Postgres-XL</productname> honors that
+<!## end>
behavior. (Releases prior to 7.3 treated it as <type>timestamp
with time zone</type>.) <type>timestamptz</type> is accepted as an
abbreviation for <type>timestamp with time zone</type>; this is a
@@ -1766,6 +1823,9 @@ MINUTE TO SECOND
<!## XC>
<productname>Postgres-XC</productname> is more flexible in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is more flexible in
+<!## end>
handling date/time input than the
<acronym>SQL</acronym> standard requires.
See <xref linkend="datetime-appendix">
@@ -2099,6 +2159,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> never examines the content of a
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> never examines the content of a
+<!## end>
literal string before determining its type, and therefore will treat
both of the above as <type>timestamp without time zone</type>. To
ensure that a literal is treated as <type>timestamp with time
@@ -2113,6 +2176,9 @@ January 8 04:05:06 1999 PST
<!## XC>
zone</type>, <productname>Postgres-XC</productname> will silently ignore
<!## end>
+<!## XL>
+ zone</type>, <productname>Postgres-XL</productname> will silently ignore
+<!## end>
any time zone indication.
That is, the resulting value is derived from the date/time
fields in the input value, and is not adjusted for time zone.
@@ -2168,6 +2234,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> supports several
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports several
+<!## end>
special date/time input values for convenience, as shown in <xref
linkend="datatype-datetime-special-table">. The values
<literal>infinity</literal> and <literal>-infinity</literal>
@@ -2387,6 +2456,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> uses the widely-used
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> uses the widely-used
+<!## end>
<literal>zoneinfo</> time zone database for information about
historical time zone rules. For times in the future, the assumption
is that the latest known rules for a given time zone will
@@ -2400,6 +2472,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> endeavors to be compatible with
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> endeavors to be compatible with
+<!## end>
the <acronym>SQL</acronym> standard definitions for typical usage.
However, the <acronym>SQL</acronym> standard has an odd mix of date and
time types and capabilities. Two obvious problems are:
@@ -2444,6 +2519,11 @@ January 8 04:05:06 1999 PST
for compliance with the <acronym>SQL</acronym> standard).
<productname>Postgres-XC</productname> assumes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> for legacy applications and
+ for compliance with the <acronym>SQL</acronym> standard).
+ <productname>Postgres-XL</productname> assumes
+<!## end>
your local time zone for any type containing only date or time.
</para>
@@ -2461,6 +2541,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> allows you to specify time zones in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows you to specify time zones in
+<!## end>
three different forms:
<itemizedlist>
<listitem>
@@ -2475,6 +2558,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> uses the widely-used
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> uses the widely-used
+<!## end>
<literal>zoneinfo</> time zone data for this purpose, so the same
names are also recognized by much other software.
</para>
@@ -2503,6 +2589,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname> will accept POSIX-style time zone
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will accept POSIX-style time zone
+<!## end>
specifications of the form <replaceable>STD</><replaceable>offset</> or
<replaceable>STD</><replaceable>offset</><replaceable>DST</>, where
<replaceable>STD</> is a zone abbreviation, <replaceable>offset</> is a
@@ -2520,6 +2609,9 @@ January 8 04:05:06 1999 PST
<!## XC>
In a standard <productname>Postgres-XC</productname> installation,
<!## end>
+<!## XL>
+ In a standard <productname>Postgres-XL</productname> installation,
+<!## end>
<filename>posixrules</> is the same as <literal>US/Eastern</>, so
that POSIX-style time zone specifications follow USA daylight-savings
rules. If needed, you can adjust this behavior by replacing the
@@ -2548,6 +2640,9 @@ January 8 04:05:06 1999 PST
<!## XC>
Everywhere else, <productname>Postgres-XC</productname> follows the
<!## end>
+<!## XL>
+ Everywhere else, <productname>Postgres-XL</productname> follows the
+<!## end>
ISO-8601 convention that positive timezone offsets are <emphasis>east</>
of Greenwich.
</para>
@@ -2586,6 +2681,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname>, the server attempts to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, the server attempts to
+<!## end>
determine the operating system's default time zone by checking the
behavior of the C library function <literal>localtime()</>. The
default time zone is selected as the closest match among
@@ -2595,6 +2693,9 @@ January 8 04:05:06 1999 PST
<!## XC>
<productname>Postgres-XC</productname>'s known time zones.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s known time zones.
+<!## end>
(These rules are also used to choose the default value of
<xref linkend="guc-log-timezone">, if not specified.)
</para>
@@ -2756,6 +2857,9 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
<!## XC>
parts. <productname>Postgres-XC</> allows the fields to have different
<!## end>
+<!## XL>
+ parts. <productname>Postgres-XL</> allows the fields to have different
+<!## end>
signs, and traditionally treats each field in the textual representation
as independently signed, so that the hour/minute/second part is
considered positive in this example. If <varname>IntervalStyle</> is
@@ -2767,6 +2871,9 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
<!## XC>
Otherwise the traditional <productname>Postgres-XC</> interpretation is
<!## end>
+<!## XL>
+ Otherwise the traditional <productname>Postgres-XL</> interpretation is
+<!## end>
used. To avoid ambiguity, it's recommended to attach an explicit sign
to each field if any field is negative.
</para>
@@ -2944,6 +3051,13 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
to far into the future, using the assumption that the length of the
year is 365.2425 days.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>, as <productname>PostgreSQL</productname>, uses Julian dates
+ for all date/time calculations. This has the useful property of correctly
+ calculating dates from 4713 BC
+ to far into the future, using the assumption that the length of the
+ year is 365.2425 days.
+<!## end>
</para>
<para>
@@ -2977,6 +3091,9 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
<!## XC>
<productname>Postgres-XC</productname> provides the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides the
+<!## end>
standard <acronym>SQL</acronym> type <type>boolean</type>;
see <xref linkend="datatype-boolean-table">.
The <type>boolean</type> type can have several states:
@@ -3201,6 +3318,9 @@ SELECT person.name, holidays.num_weeks FROM person, holidays
<!## XC>
setting compiled into <productname>Postgres-XC</productname>; in standard
<!## end>
+<!## XL>
+ setting compiled into <productname>Postgres-XL</productname>; in standard
+<!## end>
builds this means at most 63 bytes.
</para>
@@ -3232,6 +3352,9 @@ SELECT person.name, holidays.num_weeks FROM person, holidays
<!## XC>
types available in <productname>Postgres-XC</productname>. The
<!## end>
+<!## XL>
+ types available in <productname>Postgres-XL</productname>. The
+<!## end>
most fundamental type, the point, forms the basis for all of the
other types.
</para>
@@ -3527,6 +3650,9 @@ SELECT person.name, holidays.num_weeks FROM person, holidays
<!## XC>
<productname>PostgreSQL</> inherits data types to store IPv4, IPv6, and MAC
<!## end>
+<!## XL>
+ <productname>PostgreSQL</> inherits data types to store IPv4, IPv6, and MAC
+<!## end>
addresses, as shown in <xref linkend="datatype-net-types-table">. It
is better to use these types instead of plain text types to store
network addresses, because
@@ -3799,6 +3925,9 @@ SELECT person.name, holidays.num_weeks FROM person, holidays
<!## XC>
protocols (such as Token Ring). Postgres-XC makes no provisions
<!## end>
+<!## XL>
+ protocols (such as Token Ring). Postgres-XL makes no provisions
+<!## end>
for bit reversal, and all accepted formats use the canonical LSB
order.
</para>
@@ -4161,6 +4290,9 @@ a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
<!## XC>
<productname>Postgres-XC</productname> also accepts the following
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also accepts the following
+<!## end>
alternative forms for input:
use of upper-case digits, the standard format surrounded by
braces, omitting some or all hyphens, adding a hyphen after any
@@ -4182,6 +4314,9 @@ a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
<!## XC>
<productname>Postgres-XC</productname> provides storage and comparison
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides storage and comparison
+<!## end>
functions for UUIDs, but the core database does not include any
function for generating UUIDs, because no single algorithm is well
suited for every application. The <xref
@@ -4243,6 +4378,9 @@ XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>')
<!## XC>
values according to the SQL standard, the Postgres-XC-specific
<!## end>
+<!## XL>
+ values according to the SQL standard, the Postgres-XL-specific
+<!## end>
syntaxes:
<programlisting><![CDATA[
xml '<foo>bar</foo>'
@@ -4277,6 +4415,9 @@ XMLSERIALIZE ( { DOCUMENT | CONTENT } <replaceable>value</replaceable> AS <repla
<!## XC>
<type>xml</type> and character types, but Postgres-XC also allows
<!## end>
+<!## XL>
+ <type>xml</type> and character types, but Postgres-XL also allows
+<!## end>
you to simply cast the value.
</para>
@@ -4298,6 +4439,9 @@ SET XML OPTION { DOCUMENT | CONTENT };
<!## XC>
or the more Postgres-XC-like syntax
<!## end>
+<!## XL>
+ or the more Postgres-XL-like syntax
+<!## end>
<synopsis>
SET xmloption TO { DOCUMENT | CONTENT };
</synopsis>
@@ -4330,6 +4474,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
results to the client (which is the normal mode), Postgres-XC
<!## end>
+<!## XL>
+ results to the client (which is the normal mode), Postgres-XL
+<!## end>
converts all character data passed between the client and the
server and vice versa to the character encoding of the respective
end; see <xref linkend="multibyte">. This includes string
@@ -4364,6 +4511,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
the XML standard; note that Postgres-XC does not support UTF-16).
<!## end>
+<!## XL>
+ the XML standard; note that Postgres-XL does not support UTF-16).
+<!## end>
On output, data will have an encoding declaration
specifying the client encoding, unless the client encoding is
UTF-8, in which case it will be omitted.
@@ -4376,6 +4526,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
Needless to say, processing XML data with Postgres-XC will be less
<!## end>
+<!## XL>
+ Needless to say, processing XML data with Postgres-XL will be less
+<!## end>
error-prone and more efficient if the XML data encoding, client encoding,
and server encoding are the same. Since XML data is internally
processed in UTF-8, computations will be most efficient if the
@@ -4424,6 +4577,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
The text-search functionality in Postgres-XC can also be used to speed
<!## end>
+<!## XL>
+ The text-search functionality in Postgres-XL can also be used to speed
+<!## end>
up full-document searches of XML data. The necessary
<!## PG>
preprocessing support is, however, not yet available in the PostgreSQL
@@ -4431,6 +4587,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
preprocessing support is, however, not yet available in the Postgres-XC
<!## end>
+<!## XL>
+ preprocessing support is, however, not yet available in the Postgres-XL
+<!## end>
distribution.
</para>
</sect2>
@@ -4504,6 +4663,9 @@ SET xmloption TO { DOCUMENT | CONTENT };
<!## XC>
<productname>Postgres-XC</productname> as primary keys for various
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> as primary keys for various
+<!## end>
system tables. OIDs are not added to user-created tables, unless
<literal>WITH OIDS</literal> is specified when the table is
created, or the <xref linkend="guc-default-with-oids">
@@ -4662,6 +4824,9 @@ SELECT * FROM pg_attribute
<!## XC>
<productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>
+<!## end>
understands that the default expression depends on the sequence
<literal>my_seq</>; the system will not let the sequence be dropped
without first removing the default expression.
@@ -4698,6 +4863,13 @@ SELECT * FROM pg_attribute
OID value.
</para>
<!## end>
+<!## XL>
+ <para>
+ Please note that <productname>Postgres-XL</> enforces OID identity only locally.
+ Different object at different Coordinator or Datanode may be assigned the same
+ OID value.
+ </para>
+<!## end>
</sect1>
<sect1 id="datatype-pseudo">
@@ -4762,6 +4934,9 @@ SELECT * FROM pg_attribute
<!## XC>
The <productname>Postgres-XC</productname> type system contains a
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> type system contains a
+<!## end>
number of special-purpose entries that are collectively called
<firstterm>pseudo-types</>. A pseudo-type cannot be used as a
column data type, but it can be used to declare a function's
diff --git a/doc-xc/src/sgml/datetime.sgmlin b/doc-xc/src/sgml/datetime.sgmlin
index 7437664c44..41c0f9dd4c 100644
--- a/doc-xc/src/sgml/datetime.sgmlin
+++ b/doc-xc/src/sgml/datetime.sgmlin
@@ -12,6 +12,10 @@
<productname>Postgres-XC</productname> inherits uses an internal heuristic
parser from <productname>PostgreSQL</> for all date/time input support. Dates and times are input as
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> inherits uses an internal heuristic
+ parser from <productname>PostgreSQL</> for all date/time input support. Dates and times are input as
+<!## end>
strings, and are broken up into distinct fields with a preliminary
determination of what kind of information can be in the
field. Each field is interpreted and either assigned a numeric
@@ -362,6 +366,9 @@
<!## XC>
<productname>Postgres-XC</productname> provides a means to customize
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides a means to customize
+<!## end>
the set of abbreviations accepted by the server. The
<xref linkend="guc-timezone-abbreviations"> run-time parameter
determines the active set of abbreviations. While this parameter
@@ -455,6 +462,9 @@
<!## XC>
non-timezone meanings built into <productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ non-timezone meanings built into <productname>Postgres-XL</productname>.
+<!## end>
For example, the <filename>Australia</> configuration file defines
<literal>SAT</> (for South Australian Standard Time). When this
file is active, <literal>SAT</> will not be recognized as an abbreviation
@@ -557,6 +567,9 @@ $ <userinput>cal 9 1752</userinput>
<!## XC>
hence valid dates. <productname>Postgres-XC</> follows the SQL
<!## end>
+<!## XL>
+ hence valid dates. <productname>Postgres-XL</> follows the SQL
+<!## end>
standard's lead by counting dates exclusively in the Gregorian
calendar, even for years before that calendar was in use.
</para>
@@ -599,6 +612,9 @@ $ <userinput>cal 9 1752</userinput>
<!## XC>
Although <productname>Postgres-XC</> supports Julian Date notation for
<!## end>
+<!## XL>
+ Although <productname>Postgres-XL</> supports Julian Date notation for
+<!## end>
input and output of dates (and also uses them for some internal datetime
calculations), it does not observe the nicety of having dates run from
<!## PG>
@@ -607,6 +623,9 @@ $ <userinput>cal 9 1752</userinput>
<!## XC>
noon to noon. <productname>Postgres-XC</> treats a Julian Date as running
<!## end>
+<!## XL>
+ noon to noon. <productname>Postgres-XL</> treats a Julian Date as running
+<!## end>
from midnight to midnight.
</para>
diff --git a/doc-xc/src/sgml/dblink.sgmlin b/doc-xc/src/sgml/dblink.sgmlin
index 1b6039ad8f..28efce19a2 100644
--- a/doc-xc/src/sgml/dblink.sgmlin
+++ b/doc-xc/src/sgml/dblink.sgmlin
@@ -21,6 +21,20 @@
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -63,6 +77,20 @@ dblink_connect(text connname, text connstr) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
<function>dblink_connect()</> establishes a connection to a remote
@@ -243,6 +271,20 @@ dblink_connect_u(text connname, text connstr) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
<function>dblink_connect_u()</> is identical to
@@ -310,6 +352,20 @@ dblink_disconnect(text connname) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
<function>dblink_disconnect()</> closes a connection previously opened
@@ -397,6 +453,20 @@ dblink(text sql [, bool fail_on_error]) returns setof record
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -639,6 +709,20 @@ dblink_exec(text sql [, bool fail_on_error]) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -789,6 +873,20 @@ dblink_open(text connname, text cursorname, text sql [, bool fail_on_error]) ret
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -928,6 +1026,20 @@ dblink_fetch(text connname, text cursorname, int howmany [, bool fail_on_error])
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1096,6 +1208,20 @@ dblink_close(text connname, text cursorname [, bool fail_on_error]) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1221,6 +1347,20 @@ dblink_get_connections() returns text[]
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1279,6 +1419,20 @@ dblink_error_message(text connname) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1356,6 +1510,20 @@ dblink_send_query(text connname, text sql) returns int
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1452,6 +1620,20 @@ dblink_is_busy(text connname) returns int
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1530,6 +1712,20 @@ dblink_get_notify(text connname) returns setof (notify_name text, be_pid int, ex
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
<function>dblink_get_notify</> retrieves notifications on either
@@ -1624,6 +1820,20 @@ dblink_get_result(text connname [, bool fail_on_error]) returns setof record
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1790,6 +2000,20 @@ dblink_cancel_query(text connname) returns text
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1872,6 +2096,20 @@ dblink_get_pkey(text relname) returns setof dblink_pkey_results
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -1983,6 +2221,20 @@ dblink_build_sql_insert(text relname,
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -2131,6 +2383,20 @@ dblink_build_sql_delete(text relname,
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -2264,6 +2530,20 @@ dblink_build_sql_update(text relname,
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
@@ -2296,6 +2576,20 @@ dblink_build_sql_update(text relname,
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
@@ -2379,6 +2673,20 @@ dblink_build_sql_update(text relname,
corresponding <productname>PostgreSQL</> reference manual.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <filename>dblink</> module has not been tested
+ with <productname>Postges-XL</> yet. Although there're no reason
+ that <filename>dblink</> does not run
+ in <productname>Postgres-XL</>, the development team leaves the test
+ and the use of this module entirely to users.
+ </para>
+ <para>
+ This section is identical to the
+ corresponding <productname>PostgreSQL</> reference manual.
+ </para>
+<!## end>
&pgonly;
<para>
diff --git a/doc-xc/src/sgml/ddl.sgmlin b/doc-xc/src/sgml/ddl.sgmlin
index db9f0449d7..8c4451eeb5 100644
--- a/doc-xc/src/sgml/ddl.sgmlin
+++ b/doc-xc/src/sgml/ddl.sgmlin
@@ -67,6 +67,9 @@
<!## XC>
<productname>Postgres-XC</productname> includes a sizable set of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes a sizable set of
+<!## end>
built-in data types that fit many applications. Users can also
define their own data types. Most built-in data types have obvious
names and semantics, so we defer a detailed explanation to <xref
@@ -212,6 +215,85 @@ CREATE TABLE products (
</para>
<!## end>
+<!## XL>
+ <indexterm>
+ <primary>table</primary>
+ <secondary>distribution</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>table</primary>
+ <secondary>replication</secondary>
+ </indexterm>
+
+&xlonly;
+
+ <para>
+ In <productname>Postgres-XL</>, each table can be distributed or replicated
+ among Datanodes. By distributing tables each query
+ has the potential to be handled by a single or small
+ subset of the Datanodes and more transactions can be handled in parallel.
+ If you replicate tables, they can be read from just a single location, though
+ all writes will need to take place on all nodes.
+ </para>
+
+ <para>
+ When you distribute a table, you can choose almost any column of a fundamental data type as distribution
+ column.
+ For details, please refer to <xref linkend="SQL-CREATETABLE">.
+ The Datanode for a particular row is determined based upon the value of the distribution
+ column, chosen if DISTRIBUTE BY HASH was used.
+ If not used, the first column of a primary key or unique constraint is used
+ if present in the CREATE TABLE clause.
+ If neither of those are present, the first column of a foreign key constraint
+ is used, the idea being that child data can be col-located on the same node
+ as the parent table.
+ If no such constraint is defined, Postgres-XL will choose the first reasonable
+ column it can find, that is the first column that has a deterministically
+ distributable data type.
+
+ You may also choose another distribution method such as <type>MODULO</> and
+ <type>ROUNDROBIN</>.
+ To specify what column to choose as the distribution column and what value test to
+ choose, you can do as follows:
+<programlisting>
+CREATE TABLE products (
+ product_no integer,
+ name text,
+ price numeric
+) DISTRIBUTE BY HASH(product_no);
+</programlisting>
+ In this case, the column <type>product_no</> is chosen as the distribute column and
+ the target Datanode of each row is determined based upon the hash value of the column.
+ You can use <type>MODULO</> to specify modulo to test and determine the target Datanode.
+ You can also specify <type>ROUNDROBIN</> to determine the Datanode by the order each
+ row is inserted.
+ </para>
+
+ <para>
+ Please note that with <type>HASH</> and <type>MODULO</>, the Coordinator may be able to determine the
+ exact location of target row from incoming statement. This reduces the number of involved Datanodes
+ and can increase the number of transaction handled in parallel.
+ </para>
+
+ <para>
+ On the other hand, if exact location cannot be obtained from incoming statement, the
+ Coordinator will have to involve all of the Datanodes on which the involved table
+ is distributed.
+ </para>
+
+ <para>
+ To replicate a table into all the Datanodes, specify <type>DISTRIBUTE BY REPLICATION</> as
+ follows:
+<programlisting>
+CREATE TABLE products (
+ product_no integer,
+ name text,
+ price numeric
+) DISTRIBUTE BY REPLICATION;
+</programlisting>
+
+ </para>
+<!## end>
<indexterm>
<primary>table</primary>
@@ -671,6 +753,29 @@ CREATE TABLE products (
table. It cannot use other columns as well.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, in distributed
+ tables, <literal>UNIQUE</literal> constraints must include the
+ distribution column of the table.
+ This is because Postgres-XL currently only allows that it can
+ push down to the Datanodes to be enforced locally. If we include
+ the distribution column in unique constraints, it stands to
+ reason that it can be enforced locally.
+
+ If a table is distributed
+ by <type>ROUNDROBIN</type>, we cannot enforce <type>UNIQUE</>
+ constraints because it does not have a distribution column;
+ it is possible that the same value for a column exists on
+ multiple nodes.
+
+ There's no restriction in <type>UNIQUE</> constraint in replicated
+ tables. When an expression is used on a <type>UNIQUE</> constraint,
+ this expression must contain the distribution column of its parent
+ table. It cannot use other columns as well.
+ </para>
+<!## end>
</sect2>
<sect2>
@@ -746,8 +851,8 @@ CREATE TABLE example (
not enforced by <productname>PostgreSQL</productname>, but it is
usually best to follow it.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
As mentioned in <type>UNIQUE</> constraint, distribution column
must be included in <type>PRIMARY KEY</type>. Other restrictions
@@ -757,6 +862,16 @@ CREATE TABLE example (
columns as well.
</para>
<!## end>
+<!## XL>
+ <para>
+ As mentioned when discussing <type>UNIQUE</> constraint, the distribution column
+ must be included in <type>PRIMARY KEY</type>. Other restrictions
+ apply to the <type>PRIMARY KEY</> as well. When an expression is used on
+ a <type>PRIMARY KEY</> constraint, this expression must contain
+ the distribution column of its parent table. It cannot use other
+ columns as well.
+ </para>
+<!## end>
</sect2>
<sect2 id="ddl-constraints-fk">
@@ -836,6 +951,31 @@ CREATE TABLE orders (
</para>
<para>
<!## end>
+<!## XL>
+&xlonly
+
+ Let's also assume you have a table storing orders of those
+ products. We want to ensure that the orders table only contains
+ orders of products that actually exist. So we define a foreign
+ key constraint in the orders table that references the products
+ table.
+<programlisting>
+CREATE TABLE orders (
+ order_id integer,
+ product_no integer <emphasis>REFERENCES products (product_no)</emphasis>,
+ quantity integer
+) DISTRIBUTE BY HASH(product_no);
+</programlisting>
+ </para>
+&xlonly;
+ <para>
+ Please note that column with <type>REFERENCES</> should be the distribution column.
+ In this case, we cannot add <type>PRIMARY KEY</> to <type>order_id</>
+ because <type>PRIMARY KEY</type> must be the distribution column as well.
+ This limitation is introduced because constraints are enforced only locally in each Datanode.
+ </para>
+ <para>
+<!## end>
&common;
Now it is impossible to create orders with
<structfield>product_no</structfield> entries that do not appear in the
@@ -851,7 +991,7 @@ CREATE TABLE orders (
<!## PG>
<!-- NOTICE:
- In XC, we cannot ommit column name in REFERENCES clause.
+ In XC, we cannot commit column name in REFERENCES clause.
-->
<para>
You can also shorten the above command to:
@@ -872,7 +1012,6 @@ CREATE TABLE orders (
In XC, we cannot specify both PRIMARY KEY and REFERENCES key
for different columns.
-->
-&xconly;
<para>
A foreign key can also constrain and reference a group of columns.
As usual, it then needs to be written in table constraint form.
@@ -979,6 +1118,20 @@ CREATE TABLE order_items (
</itemizedlist>
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ We know that the foreign keys disallow creation of orders that
+ do not relate to any products. But what if a product is removed
+ after an order is created that references it? SQL allows you to
+ handle that as well. Intuitively, we have a few options:
+ <itemizedlist spacing="compact">
+ <listitem><para>Disallow deleting a referenced order</para></listitem>
+ <listitem><para>Delete the order line as well</para></listitem>
+ <listitem><para>Something else?</para></listitem>
+ </itemizedlist>
+ </para>
+<!## end>
&common;
<para>
To illustrate this, let's implement the following policy on the
@@ -1030,6 +1183,28 @@ CREATE TABLE order_items (
) DISTRIBUTE BY HASH(order_id);
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+CREATE TABLE products (
+ product_no integer PRIMARY KEY,
+ name text,
+ price numeric
+);
+
+CREATE TABLE orders (
+ order_id integer PRIMARY KEY,
+ shipping_address text,
+ ...
+);
+
+CREATE TABLE order_items (
+ product_no integer,
+ order_id integer REFERENCES orders <emphasis>ON DELETE CASCADE</emphasis>,
+ quantity integer,
+ PRIMARY KEY (product_no, order_id)
+) DISTRIBUTE BY HASH(order_id);
+</programlisting>
+<!## end>
</para>
<para>
@@ -1171,6 +1346,16 @@ $xc-constraint;
<productname>XC</> cluster.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <productname>Postgres-XL</> does not enforce
+ OID integrity among the cluster. OIDs are assigned locally in
+ each Coordinator and Datanode. You can use this in expressions
+ but you should not expect OID values are the same throughout the
+ <productname>XL</> cluster.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -1200,6 +1385,16 @@ $xc-constraint;
<productname>XC</> cluster.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <productname>Postgres-XL</> does not enforce
+ OID integrity among the cluster. OIDs are assigned locally in
+ each Coordinator and Datanode. You can use this in expressions,
+ but you should not expect OID values are the same throughout the
+ <productname>XL</> cluster.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -1291,6 +1486,15 @@ $xc-constraint;
this value.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, ctid is local to Coordinators
+ and Datanodes. It is not good practice to use this value in
+ SQL statements and can be very dangerous when using it to update
+ data.
+ </para>
+<!## end>
</listitem>
</varlistentry>
</variablelist>
@@ -1354,6 +1558,16 @@ $xc-constraint;
<productname>XC</> cluster.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Again, <productname>Postgres-XL</> does not enforce
+ OID integrity among the cluster. OIDs are assigned locally in
+ each Coordinator and Datanode. You can use this in expressions
+ but you should not expect OIDs values to refer to the same object throughout the
+ <productname>XL</> cluster.
+ </para>
+<!## end>
&common;
<para>
Command identifiers are also 32-bit quantities. This creates a hard limit
@@ -1437,6 +1651,20 @@ $xc-constraint;
</itemizedlist>
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</> the following are not allowed:
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>Modifying distribution columns definition</para>
+ </listitem>
+ <listitem>
+ <para>Modifying distribution column values</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+<!## end>
<sect2>
<title>Adding a Column</title>
@@ -1543,6 +1771,13 @@ ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
</para>
&xc-constraint;
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please remember that the distribution column has to be included in UNIQUE and REFERENCE constraints.
+ </para>
+&xc-constraint;
+<!## end>
</sect2>
<sect2>
@@ -1654,6 +1889,14 @@ ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
on the column before altering its type, and then add back suitably
modified constraints afterwards.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> will attempt to convert the column's
+ default value (if any) to the new type, as well as any constraints
+ that involve the column. But these conversions might fail, or might
+ produce surprising results. It's often best to drop any constraints
+ on the column before altering its type, and then add back suitably
+ modified constraints afterwards.
+<!## end>
</para>
<!## XC>
&xconly;
@@ -1662,6 +1905,13 @@ ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
type of distribution column.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ It is <productname>Postgres-XL</>'s restriction that you cannot change the
+ type of distribution column.
+ </para>
+<!## end>
</sect2>
<sect2>
diff --git a/doc-xc/src/sgml/dfunc.sgmlin b/doc-xc/src/sgml/dfunc.sgmlin
index bea8633199..16a2b1809e 100644
--- a/doc-xc/src/sgml/dfunc.sgmlin
+++ b/doc-xc/src/sgml/dfunc.sgmlin
@@ -13,6 +13,9 @@
<!## XC>
<productname>Postgres-XC</productname> extension functions written in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension functions written in
+<!## end>
C, they must be compiled and linked in a special way to produce a
file that can be dynamically loaded by the server. To be precise, a
<firstterm>shared library</firstterm> needs to be
@@ -31,6 +34,9 @@
<!## XC>
In addition, the <productname>Postgres-XC</productname> source code
<!## end>
+<!## XL>
+ In addition, the <productname>Postgres-XL</productname> source code
+<!## end>
contains several working examples in the
<filename>contrib</filename> directory. If you rely on these
examples you will make your modules dependent on the availability
@@ -40,6 +46,9 @@
<!## XC>
of the <productname>Postgres-XC</productname> source code, however.
<!## end>
+<!## XL>
+ of the <productname>Postgres-XL</productname> source code, however.
+<!## end>
</para>
<para>
@@ -321,6 +330,9 @@ gcc -shared -o foo.so foo.o
<!## XC>
<productname>Postgres-XC</productname>. When specifying the file name
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. When specifying the file name
+<!## end>
to the <command>CREATE FUNCTION</command> command, one must give it
the name of the shared library file, not the intermediate object file.
Note that the system's standard shared-library extension (usually
diff --git a/doc-xc/src/sgml/dml.sgmlin b/doc-xc/src/sgml/dml.sgmlin
index 73a753ba43..8c4507c732 100644
--- a/doc-xc/src/sgml/dml.sgmlin
+++ b/doc-xc/src/sgml/dml.sgmlin
@@ -84,6 +84,9 @@ INSERT INTO products VALUES (1, 'Cheese');
<!## XC>
The second form is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ The second form is a <productname>Postgres-XL</productname>
+<!## end>
extension. It fills the columns from the left with as many values
as are given, and the rest will be defaulted.
</para>
@@ -220,6 +223,13 @@ UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a &gt; 0;
modify the value of distribution column.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please remember that <productname>Postgres-XL</> does not allow to
+ modify the value of distribution column.
+ </para>
+<!## end>
</sect1>
<sect1 id="dml-delete">
diff --git a/doc-xc/src/sgml/docguide.sgmlin b/doc-xc/src/sgml/docguide.sgmlin
index e7a9de5ad4..04e8005d11 100644
--- a/doc-xc/src/sgml/docguide.sgmlin
+++ b/doc-xc/src/sgml/docguide.sgmlin
@@ -12,6 +12,9 @@
<!## XC>
<productname>Postgres-XC</productname> has four primary documentation
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> has four primary documentation
+<!## end>
formats:
<itemizedlist>
@@ -44,6 +47,9 @@
<!## XC>
be found throughout the <productname>Postgres-XC</productname> source tree,
<!## end>
+<!## XL>
+ be found throughout the <productname>Postgres-XL</productname> source tree,
+<!## end>
documenting various implementation issues.
</para>
@@ -101,7 +107,26 @@
generate target <literal>sgml</> files.
</para>
<para>
- <literal>Makefile</> has been modified to accomodate these changes.
+ <literal>Makefile</> has been modified to accommodate these changes.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ To make it simpler to compare original <productname>PostgreSQL</>
+ documentation with <productname>Postgres-XL</>, we decided to
+ generate <productname>DocBook</> file from new file prefixed
+ as <literal>sgmlin</>. <literal>sgmlin</> file is
+ essentially <productname>DocBook</> file with additional
+ tags <literal>&lt;!## tag&gt;</> and <literal>&lt!## end&gt;</>.
+ The former is a start tag and the latter is the stop tag. These
+ tags should occupy whole line. No other tags or CCDATA should
+ appear in the same line. The tool <command>makesgml</> takes these
+ file, filter only <productname>Postgres-XL</> specific contents and
+ generate target <literal>sgml</> files.
+ </para>
+ <para>
+ <literal>Makefile</> has been modified to accommodate these changes.
</para>
<!## end>
</sect1>
@@ -163,6 +188,9 @@
<!## XC>
produce HTML or PDF output, but official Postgres-XC releases
<!## end>
+<!## XL>
+ produce HTML or PDF output, but official Postgres-XL releases
+<!## end>
use the DSSSL stylesheets for that.
</para>
</listitem>
@@ -239,6 +267,29 @@
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term>makesgml</term>
+
+ <listitem>
+&xlonly;
+ <para>
+ <command>makesgml</> is <productname>Postgres-XL</> specific
+ tool to generate <literal>sgml</> file from <literal>sgmlin</>
+ file. As described above, <literal>sgmlin</> file contains
+ both <productname>PostgreSQL</> and <productname>Postgres-XL</>
+ documentation source to make it simpler to deal with future
+ revision of original <productname>PostgreSQL</> documentation.
+ </para>
+ <para>
+ <command>makesgml</> source is included in the document source.
+ Build the binary and place this to appropriate path.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+<!## end>
</variablelist>
</para>
@@ -531,6 +582,9 @@ CATALOG "docbook-dsssl-1.<replaceable>xx</>/catalog"
<!## XC>
<productname>Postgres-XC</productname> doesn't use this catalog
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> doesn't use this catalog
+<!## end>
entry. See <xref linkend="docguide-toolsets-configure"> for
information about how to select the stylesheets instead.
</para>
@@ -574,6 +628,9 @@ CATALOG "docbook-dsssl-1.<replaceable>xx</>/catalog"
<!## XC>
<productname>Postgres-XC</productname> documentation sources, you
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> documentation sources, you
+<!## end>
will need to increase the size of
<application>TeX</application>'s internal data structures.
Details on this can be found in the <application>JadeTeX</application>
@@ -609,6 +666,9 @@ CATALOG "docbook-dsssl-1.<replaceable>xx</>/catalog"
<!## XC>
the <productname>Postgres-XC</productname> programs themselves.
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</productname> programs themselves.
+<!## end>
Check the output near the end of the run, it should look something
like this:
<screen>
@@ -748,6 +808,9 @@ gmake man
<!## XC>
When using JadeTeX to build the Postgres-XC documentation, you will
<!## end>
+<!## XL>
+ When using JadeTeX to build the Postgres-XL documentation, you will
+<!## end>
probably need to increase some of TeX's internal parameters. These
can be set in the file <filename>texmf.cnf</filename>. The following
settings worked at the time of this writing:
@@ -799,6 +862,9 @@ save_size.pdfjadetex = 15000
<!## XC>
You can also create a printable version of the <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ You can also create a printable version of the <productname>Postgres-XL</productname>
+<!## end>
documentation by converting it to <acronym>RTF</acronym> and
applying minor formatting corrections using an office suite.
Depending on the capabilities of the particular office suite, you
@@ -815,6 +881,9 @@ save_size.pdfjadetex = 15000
<!## XC>
It appears that current versions of the <productname>Postgres-XC</productname> documentation
<!## end>
+<!## XL>
+ It appears that current versions of the <productname>Postgres-XL</productname> documentation
+<!## end>
trigger some bug in or exceed the size limit of OpenJade. If the
build process of the <acronym>RTF</acronym> version hangs for a
long time and the output file still has size 0, then you might have
@@ -1216,6 +1285,9 @@ save_size.pdfjadetex = 15000
<!## XC>
<productname>Postgres-XC</productname> reference pages, but also
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> reference pages, but also
+<!## end>
with reference pages provided by the operating system and other
packages. Hence the following guidelines have been developed.
They are for the most part consistent with similar guidelines
@@ -1375,6 +1447,11 @@ save_size.pdfjadetex = 15000
<productname>Postgres-XC</productname> SQL command reference
pages, citation of <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> command reference pages,
+ <productname>Postgres-XL</productname> SQL command reference
+ pages, citation of <productname>Postgres-XL</productname>
+<!## end>
manuals, other reference pages (e.g., operating system, other
packages), other documentation. Items in the same group are
listed alphabetically.
diff --git a/doc-xc/src/sgml/extend.sgmlin b/doc-xc/src/sgml/extend.sgmlin
index 6b8d794481..8c0e6876ce 100644
--- a/doc-xc/src/sgml/extend.sgmlin
+++ b/doc-xc/src/sgml/extend.sgmlin
@@ -16,6 +16,9 @@
<!## XC>
can extend the <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ can extend the <productname>Postgres-XL</productname>
+<!## end>
<acronym>SQL</acronym> query language by adding:
<itemizedlist spacing="compact" mark="bullet">
@@ -63,6 +66,9 @@
<!## XC>
<productname>Postgres-XC</productname> is extensible because its operation is
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is extensible because its operation is
+<!## end>
catalog-driven. If you are familiar with standard
relational database systems, you know that they store information
about databases, tables, columns, etc., in what are
@@ -78,6 +84,10 @@
between <productname>Postgres-XC</productname> and standard relational database systems is
that <productname>Postgres-XC</productname> stores much more information in its
<!## end>
+<!## XL>
+ between <productname>Postgres-XL</productname> and standard relational database systems is
+ that <productname>Postgres-XL</productname> stores much more information in its
+<!## end>
catalogs: not only information about tables and columns,
but also information about data types, functions, access
methods, and so on. These tables can be modified by
@@ -89,6 +99,10 @@
the user, and since <productname>Postgres-XC</productname> bases its operation
on these tables, this means that <productname>Postgres-XC</productname> can be
<!## end>
+<!## XL>
+ the user, and since <productname>Postgres-XL</productname> bases its operation
+ on these tables, this means that <productname>Postgres-XL</productname> can be
+<!## end>
extended by users. By comparison, conventional
database systems can only be extended by changing hardcoded
procedures in the source code or by loading modules
@@ -101,6 +115,12 @@
from <productname>PostgreSQL</>.
</para>
<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</> inherits all of this feature
+ from <productname>PostgreSQL</>.
+ </para>
+<!## end>
<para>
<!## PG>
@@ -127,6 +147,18 @@
suited for rapid prototyping of new applications and storage
structures.
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> server can moreover
+ incorporate user-written code into itself through dynamic loading.
+ That is, the user can specify an object code file (e.g., a shared
+ library) that implements a new type or function, and
+ <productname>Postgres-XL</productname> will load it as required.
+ Code written in <acronym>SQL</acronym> is even more trivial to add
+ to the server. This ability to modify its operation <quote>on the
+ fly</quote> makes <productname>Postgres-XL</productname> uniquely
+ suited for rapid prototyping of new applications and storage
+ structures.
+<!## end>
</para>
</sect1>
@@ -137,6 +169,9 @@
<!## XC>
<title>The <productname>Postgres-XC</productname> Type System</title>
<!## end>
+<!## XL>
+ <title>The <productname>Postgres-XL</productname> Type System</title>
+<!## end>
<indexterm zone="extend-type-system">
<primary>base type</primary>
@@ -164,6 +199,9 @@
<!## XC>
<productname>Postgres-XC</>'s, and <productname>PostgreSQL</productname>'s as well, data types are divided into base
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s, and <productname>PostgreSQL</productname>'s as well, data types are divided into base
+<!## end>
types, composite types, domains, and pseudo-types.
</para>
@@ -182,6 +220,9 @@
<!## XC>
<productname>Postgres-XC</productname> can only operate on such
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can only operate on such
+<!## end>
types through functions provided by the user and only understands
the behavior of such types to the extent that the user describes
them. Base types are further subdivided into scalar and array
diff --git a/doc-xc/src/sgml/external-projects.sgmlin b/doc-xc/src/sgml/external-projects.sgmlin
index b707f54470..d2b227d482 100644
--- a/doc-xc/src/sgml/external-projects.sgmlin
+++ b/doc-xc/src/sgml/external-projects.sgmlin
@@ -11,6 +11,14 @@
original <productname>PostgreSQL</> manuals.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Original <productname>PostgreSQL</> has a lot of external projects.
+ For details, please see the corresponding sections of
+ original <productname>PostgreSQL</> manuals.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/features-supported.sgmlin b/doc-xc/src/sgml/features-supported.sgmlin
new file mode 100644
index 0000000000..2930e6418c
--- /dev/null
+++ b/doc-xc/src/sgml/features-supported.sgmlin
@@ -0,0 +1,2078 @@
+<tbody>
+ <row>
+ <entry>B012</entry>
+ <entry></entry>
+ <entry>Embedded C</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B021</entry>
+ <entry></entry>
+ <entry>Direct SQL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011</entry>
+ <entry>Core</entry>
+ <entry>Numeric data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-01</entry>
+ <entry>Core</entry>
+ <entry>INTEGER and SMALLINT data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-02</entry>
+ <entry>Core</entry>
+ <entry>REAL, DOUBLE PRECISION, and FLOAT data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-03</entry>
+ <entry>Core</entry>
+ <entry>DECIMAL and NUMERIC data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-04</entry>
+ <entry>Core</entry>
+ <entry>Arithmetic operators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-05</entry>
+ <entry>Core</entry>
+ <entry>Numeric comparison</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E011-06</entry>
+ <entry>Core</entry>
+ <entry>Implicit casting among the numeric data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021</entry>
+ <entry>Core</entry>
+ <entry>Character data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-01</entry>
+ <entry>Core</entry>
+ <entry>CHARACTER data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-02</entry>
+ <entry>Core</entry>
+ <entry>CHARACTER VARYING data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-03</entry>
+ <entry>Core</entry>
+ <entry>Character literals</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-04</entry>
+ <entry>Core</entry>
+ <entry>CHARACTER_LENGTH function</entry>
+ <entry>trims trailing spaces from CHARACTER values before counting</entry>
+ </row>
+ <row>
+ <entry>E021-05</entry>
+ <entry>Core</entry>
+ <entry>OCTET_LENGTH function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-06</entry>
+ <entry>Core</entry>
+ <entry>SUBSTRING function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-07</entry>
+ <entry>Core</entry>
+ <entry>Character concatenation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-08</entry>
+ <entry>Core</entry>
+ <entry>UPPER and LOWER functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-09</entry>
+ <entry>Core</entry>
+ <entry>TRIM function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-10</entry>
+ <entry>Core</entry>
+ <entry>Implicit casting among the character string types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-11</entry>
+ <entry>Core</entry>
+ <entry>POSITION function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E021-12</entry>
+ <entry>Core</entry>
+ <entry>Character comparison</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E031</entry>
+ <entry>Core</entry>
+ <entry>Identifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E031-01</entry>
+ <entry>Core</entry>
+ <entry>Delimited identifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E031-02</entry>
+ <entry>Core</entry>
+ <entry>Lower case identifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E031-03</entry>
+ <entry>Core</entry>
+ <entry>Trailing underscore</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051</entry>
+ <entry>Core</entry>
+ <entry>Basic query specification</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-01</entry>
+ <entry>Core</entry>
+ <entry>SELECT DISTINCT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-02</entry>
+ <entry>Core</entry>
+ <entry>GROUP BY clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-04</entry>
+ <entry>Core</entry>
+ <entry>GROUP BY can contain columns not in &lt;select list&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-05</entry>
+ <entry>Core</entry>
+ <entry>Select list items can be renamed</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-06</entry>
+ <entry>Core</entry>
+ <entry>HAVING clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-07</entry>
+ <entry>Core</entry>
+ <entry>Qualified * in select list</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-08</entry>
+ <entry>Core</entry>
+ <entry>Correlation names in the FROM clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E051-09</entry>
+ <entry>Core</entry>
+ <entry>Rename columns in the FROM clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061</entry>
+ <entry>Core</entry>
+ <entry>Basic predicates and search conditions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-01</entry>
+ <entry>Core</entry>
+ <entry>Comparison predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-02</entry>
+ <entry>Core</entry>
+ <entry>BETWEEN predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-03</entry>
+ <entry>Core</entry>
+ <entry>IN predicate with list of values</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-04</entry>
+ <entry>Core</entry>
+ <entry>LIKE predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-05</entry>
+ <entry>Core</entry>
+ <entry>LIKE predicate ESCAPE clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-06</entry>
+ <entry>Core</entry>
+ <entry>NULL predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-07</entry>
+ <entry>Core</entry>
+ <entry>Quantified comparison predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-08</entry>
+ <entry>Core</entry>
+ <entry>EXISTS predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-09</entry>
+ <entry>Core</entry>
+ <entry>Subqueries in comparison predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-11</entry>
+ <entry>Core</entry>
+ <entry>Subqueries in IN predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-12</entry>
+ <entry>Core</entry>
+ <entry>Subqueries in quantified comparison predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-13</entry>
+ <entry>Core</entry>
+ <entry>Correlated subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E061-14</entry>
+ <entry>Core</entry>
+ <entry>Search condition</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071</entry>
+ <entry>Core</entry>
+ <entry>Basic query expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071-01</entry>
+ <entry>Core</entry>
+ <entry>UNION DISTINCT table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071-02</entry>
+ <entry>Core</entry>
+ <entry>UNION ALL table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071-03</entry>
+ <entry>Core</entry>
+ <entry>EXCEPT DISTINCT table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071-05</entry>
+ <entry>Core</entry>
+ <entry>Columns combined via table operators need not have exactly the same data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E071-06</entry>
+ <entry>Core</entry>
+ <entry>Table operators in subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-01</entry>
+ <entry>Core</entry>
+ <entry>SELECT privilege</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-02</entry>
+ <entry>Core</entry>
+ <entry>DELETE privilege</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-03</entry>
+ <entry>Core</entry>
+ <entry>INSERT privilege at the table level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-04</entry>
+ <entry>Core</entry>
+ <entry>UPDATE privilege at the table level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-05</entry>
+ <entry>Core</entry>
+ <entry>UPDATE privilege at the column level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-06</entry>
+ <entry>Core</entry>
+ <entry>REFERENCES privilege at the table level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-07</entry>
+ <entry>Core</entry>
+ <entry>REFERENCES privilege at the column level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-08</entry>
+ <entry>Core</entry>
+ <entry>WITH GRANT OPTION</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-10</entry>
+ <entry>Core</entry>
+ <entry>EXECUTE privilege</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091</entry>
+ <entry>Core</entry>
+ <entry>Set functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-01</entry>
+ <entry>Core</entry>
+ <entry>AVG</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-02</entry>
+ <entry>Core</entry>
+ <entry>COUNT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-03</entry>
+ <entry>Core</entry>
+ <entry>MAX</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-04</entry>
+ <entry>Core</entry>
+ <entry>MIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-05</entry>
+ <entry>Core</entry>
+ <entry>SUM</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-06</entry>
+ <entry>Core</entry>
+ <entry>ALL quantifier</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E091-07</entry>
+ <entry>Core</entry>
+ <entry>DISTINCT quantifier</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E101</entry>
+ <entry>Core</entry>
+ <entry>Basic data manipulation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E101-01</entry>
+ <entry>Core</entry>
+ <entry>INSERT statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E101-03</entry>
+ <entry>Core</entry>
+ <entry>Searched UPDATE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E101-04</entry>
+ <entry>Core</entry>
+ <entry>Searched DELETE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E111</entry>
+ <entry>Core</entry>
+ <entry>Single row SELECT statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121</entry>
+ <entry>Core</entry>
+ <entry>Basic cursor support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-01</entry>
+ <entry>Core</entry>
+ <entry>DECLARE CURSOR</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-02</entry>
+ <entry>Core</entry>
+ <entry>ORDER BY columns need not be in select list</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-03</entry>
+ <entry>Core</entry>
+ <entry>Value expressions in ORDER BY clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-04</entry>
+ <entry>Core</entry>
+ <entry>OPEN statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-06</entry>
+ <entry>Core</entry>
+ <entry>Positioned UPDATE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-07</entry>
+ <entry>Core</entry>
+ <entry>Positioned DELETE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-08</entry>
+ <entry>Core</entry>
+ <entry>CLOSE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-10</entry>
+ <entry>Core</entry>
+ <entry>FETCH statement implicit NEXT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E121-17</entry>
+ <entry>Core</entry>
+ <entry>WITH HOLD cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E131</entry>
+ <entry>Core</entry>
+ <entry>Null value support (nulls in lieu of values)</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141</entry>
+ <entry>Core</entry>
+ <entry>Basic integrity constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-01</entry>
+ <entry>Core</entry>
+ <entry>NOT NULL constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-02</entry>
+ <entry>Core</entry>
+ <entry>UNIQUE constraints of NOT NULL columns</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-03</entry>
+ <entry>Core</entry>
+ <entry>PRIMARY KEY constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-04</entry>
+ <entry>Core</entry>
+ <entry>Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-06</entry>
+ <entry>Core</entry>
+ <entry>CHECK constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-07</entry>
+ <entry>Core</entry>
+ <entry>Column defaults</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-08</entry>
+ <entry>Core</entry>
+ <entry>NOT NULL inferred on PRIMARY KEY</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E141-10</entry>
+ <entry>Core</entry>
+ <entry>Names in a foreign key can be specified in any order</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E151</entry>
+ <entry>Core</entry>
+ <entry>Transaction support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E151-01</entry>
+ <entry>Core</entry>
+ <entry>COMMIT statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E151-02</entry>
+ <entry>Core</entry>
+ <entry>ROLLBACK statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E152</entry>
+ <entry>Core</entry>
+ <entry>Basic SET TRANSACTION statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E152-01</entry>
+ <entry>Core</entry>
+ <entry>SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E152-02</entry>
+ <entry>Core</entry>
+ <entry>SET TRANSACTION statement: READ ONLY and READ WRITE clauses</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E161</entry>
+ <entry>Core</entry>
+ <entry>SQL comments using leading double minus</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E171</entry>
+ <entry>Core</entry>
+ <entry>SQLSTATE support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021</entry>
+ <entry>Core</entry>
+ <entry>Basic information schema</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-01</entry>
+ <entry>Core</entry>
+ <entry>COLUMNS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-02</entry>
+ <entry>Core</entry>
+ <entry>TABLES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-03</entry>
+ <entry>Core</entry>
+ <entry>VIEWS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-04</entry>
+ <entry>Core</entry>
+ <entry>TABLE_CONSTRAINTS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-05</entry>
+ <entry>Core</entry>
+ <entry>REFERENTIAL_CONSTRAINTS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F021-06</entry>
+ <entry>Core</entry>
+ <entry>CHECK_CONSTRAINTS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031</entry>
+ <entry>Core</entry>
+ <entry>Basic schema manipulation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-01</entry>
+ <entry>Core</entry>
+ <entry>CREATE TABLE statement to create persistent base tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-02</entry>
+ <entry>Core</entry>
+ <entry>CREATE VIEW statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-03</entry>
+ <entry>Core</entry>
+ <entry>GRANT statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-04</entry>
+ <entry>Core</entry>
+ <entry>ALTER TABLE statement: ADD COLUMN clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-13</entry>
+ <entry>Core</entry>
+ <entry>DROP TABLE statement: RESTRICT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-16</entry>
+ <entry>Core</entry>
+ <entry>DROP VIEW statement: RESTRICT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F031-19</entry>
+ <entry>Core</entry>
+ <entry>REVOKE statement: RESTRICT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F032</entry>
+ <entry></entry>
+ <entry>CASCADE drop behavior</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F033</entry>
+ <entry></entry>
+ <entry>ALTER TABLE statement: DROP COLUMN clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F034</entry>
+ <entry></entry>
+ <entry>Extended REVOKE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F034-01</entry>
+ <entry></entry>
+ <entry>REVOKE statement performed by other than the owner of a schema object</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F034-02</entry>
+ <entry></entry>
+ <entry>REVOKE statement: GRANT OPTION FOR clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F034-03</entry>
+ <entry></entry>
+ <entry>REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041</entry>
+ <entry>Core</entry>
+ <entry>Basic joined table</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-01</entry>
+ <entry>Core</entry>
+ <entry>Inner join (but not necessarily the INNER keyword)</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-02</entry>
+ <entry>Core</entry>
+ <entry>INNER keyword</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-03</entry>
+ <entry>Core</entry>
+ <entry>LEFT OUTER JOIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-04</entry>
+ <entry>Core</entry>
+ <entry>RIGHT OUTER JOIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-05</entry>
+ <entry>Core</entry>
+ <entry>Outer joins can be nested</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-07</entry>
+ <entry>Core</entry>
+ <entry>The inner table in a left or right outer join can also be used in an inner join</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F041-08</entry>
+ <entry>Core</entry>
+ <entry>All comparison operators are supported (rather than just =)</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051</entry>
+ <entry>Core</entry>
+ <entry>Basic date and time</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-01</entry>
+ <entry>Core</entry>
+ <entry>DATE data type (including support of DATE literal)</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-02</entry>
+ <entry>Core</entry>
+ <entry>TIME data type (including support of TIME literal) with fractional seconds precision of at least 0</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-03</entry>
+ <entry>Core</entry>
+ <entry>TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-04</entry>
+ <entry>Core</entry>
+ <entry>Comparison predicate on DATE, TIME, and TIMESTAMP data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-05</entry>
+ <entry>Core</entry>
+ <entry>Explicit CAST between datetime types and character string types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-06</entry>
+ <entry>Core</entry>
+ <entry>CURRENT_DATE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-07</entry>
+ <entry>Core</entry>
+ <entry>LOCALTIME</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F051-08</entry>
+ <entry>Core</entry>
+ <entry>LOCALTIMESTAMP</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F052</entry>
+ <entry>Enhanced datetime facilities</entry>
+ <entry>Intervals and datetime arithmetic</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F053</entry>
+ <entry></entry>
+ <entry>OVERLAPS predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F081</entry>
+ <entry>Core</entry>
+ <entry>UNION and EXCEPT in views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F111</entry>
+ <entry></entry>
+ <entry>Isolation levels other than SERIALIZABLE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F111-01</entry>
+ <entry></entry>
+ <entry>READ UNCOMMITTED isolation level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F111-02</entry>
+ <entry></entry>
+ <entry>READ COMMITTED isolation level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F111-03</entry>
+ <entry></entry>
+ <entry>REPEATABLE READ isolation level</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131</entry>
+ <entry>Core</entry>
+ <entry>Grouped operations</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131-01</entry>
+ <entry>Core</entry>
+ <entry>WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131-02</entry>
+ <entry>Core</entry>
+ <entry>Multiple tables supported in queries with grouped views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131-03</entry>
+ <entry>Core</entry>
+ <entry>Set functions supported in queries with grouped views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131-04</entry>
+ <entry>Core</entry>
+ <entry>Subqueries with GROUP BY and HAVING clauses and grouped views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F131-05</entry>
+ <entry>Core</entry>
+ <entry>Single row SELECT with GROUP BY and HAVING clauses and grouped views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F171</entry>
+ <entry></entry>
+ <entry>Multiple schemas per user</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F191</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Referential delete actions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F200</entry>
+ <entry></entry>
+ <entry>TRUNCATE TABLE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F201</entry>
+ <entry>Core</entry>
+ <entry>CAST function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F221</entry>
+ <entry>Core</entry>
+ <entry>Explicit defaults</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F222</entry>
+ <entry></entry>
+ <entry>INSERT statement: DEFAULT VALUES clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F231</entry>
+ <entry></entry>
+ <entry>Privilege tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F231-01</entry>
+ <entry></entry>
+ <entry>TABLE_PRIVILEGES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F231-02</entry>
+ <entry></entry>
+ <entry>COLUMN_PRIVILEGES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F231-03</entry>
+ <entry></entry>
+ <entry>USAGE_PRIVILEGES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F251</entry>
+ <entry></entry>
+ <entry>Domain support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F261</entry>
+ <entry>Core</entry>
+ <entry>CASE expression</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F261-01</entry>
+ <entry>Core</entry>
+ <entry>Simple CASE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F261-02</entry>
+ <entry>Core</entry>
+ <entry>Searched CASE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F261-03</entry>
+ <entry>Core</entry>
+ <entry>NULLIF</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F261-04</entry>
+ <entry>Core</entry>
+ <entry>COALESCE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F271</entry>
+ <entry></entry>
+ <entry>Compound character literals</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F281</entry>
+ <entry></entry>
+ <entry>LIKE enhancements</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F302</entry>
+ <entry></entry>
+ <entry>INTERSECT table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F302-01</entry>
+ <entry></entry>
+ <entry>INTERSECT DISTINCT table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F302-02</entry>
+ <entry></entry>
+ <entry>INTERSECT ALL table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F304</entry>
+ <entry></entry>
+ <entry>EXCEPT ALL table operator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311-01</entry>
+ <entry>Core</entry>
+ <entry>CREATE SCHEMA</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311-02</entry>
+ <entry>Core</entry>
+ <entry>CREATE TABLE for persistent base tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311-03</entry>
+ <entry>Core</entry>
+ <entry>CREATE VIEW</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311-05</entry>
+ <entry>Core</entry>
+ <entry>GRANT statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F321</entry>
+ <entry></entry>
+ <entry>User authorization</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F361</entry>
+ <entry></entry>
+ <entry>Subprogram support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F381</entry>
+ <entry></entry>
+ <entry>Extended schema manipulation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F381-01</entry>
+ <entry></entry>
+ <entry>ALTER TABLE statement: ALTER COLUMN clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F381-02</entry>
+ <entry></entry>
+ <entry>ALTER TABLE statement: ADD CONSTRAINT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F381-03</entry>
+ <entry></entry>
+ <entry>ALTER TABLE statement: DROP CONSTRAINT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F382</entry>
+ <entry></entry>
+ <entry>Alter column data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F391</entry>
+ <entry></entry>
+ <entry>Long identifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F392</entry>
+ <entry></entry>
+ <entry>Unicode escapes in identifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F393</entry>
+ <entry></entry>
+ <entry>Unicode escapes in literals</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F401</entry>
+ <entry></entry>
+ <entry>Extended joined table</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F401-01</entry>
+ <entry></entry>
+ <entry>NATURAL JOIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F401-02</entry>
+ <entry></entry>
+ <entry>FULL OUTER JOIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F401-04</entry>
+ <entry></entry>
+ <entry>CROSS JOIN</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F402</entry>
+ <entry></entry>
+ <entry>Named column joins for LOBs, arrays, and multisets</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F411</entry>
+ <entry>Enhanced datetime facilities</entry>
+ <entry>Time zone specification</entry>
+ <entry>differences regarding literal interpretation</entry>
+ </row>
+ <row>
+ <entry>F421</entry>
+ <entry></entry>
+ <entry>National character</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431</entry>
+ <entry></entry>
+ <entry>Read-only scrollable cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-01</entry>
+ <entry></entry>
+ <entry>FETCH with explicit NEXT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-02</entry>
+ <entry></entry>
+ <entry>FETCH FIRST</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-03</entry>
+ <entry></entry>
+ <entry>FETCH LAST</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-04</entry>
+ <entry></entry>
+ <entry>FETCH PRIOR</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-05</entry>
+ <entry></entry>
+ <entry>FETCH ABSOLUTE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F431-06</entry>
+ <entry></entry>
+ <entry>FETCH RELATIVE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F441</entry>
+ <entry></entry>
+ <entry>Extended set function support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F442</entry>
+ <entry></entry>
+ <entry>Mixed column references in set functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F471</entry>
+ <entry>Core</entry>
+ <entry>Scalar subquery values</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F481</entry>
+ <entry>Core</entry>
+ <entry>Expanded NULL predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F491</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Constraint management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F501</entry>
+ <entry>Core</entry>
+ <entry>Features and conformance views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F501-01</entry>
+ <entry>Core</entry>
+ <entry>SQL_FEATURES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F501-02</entry>
+ <entry>Core</entry>
+ <entry>SQL_SIZING view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F501-03</entry>
+ <entry>Core</entry>
+ <entry>SQL_LANGUAGES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F502</entry>
+ <entry></entry>
+ <entry>Enhanced documentation tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F502-01</entry>
+ <entry></entry>
+ <entry>SQL_SIZING_PROFILES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F502-02</entry>
+ <entry></entry>
+ <entry>SQL_IMPLEMENTATION_INFO view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F502-03</entry>
+ <entry></entry>
+ <entry>SQL_PACKAGES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F531</entry>
+ <entry></entry>
+ <entry>Temporary tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F555</entry>
+ <entry>Enhanced datetime facilities</entry>
+ <entry>Enhanced seconds precision</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F561</entry>
+ <entry></entry>
+ <entry>Full value expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F571</entry>
+ <entry></entry>
+ <entry>Truth value tests</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F591</entry>
+ <entry></entry>
+ <entry>Derived tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F611</entry>
+ <entry></entry>
+ <entry>Indicator data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F651</entry>
+ <entry></entry>
+ <entry>Catalog name qualifiers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F661</entry>
+ <entry></entry>
+ <entry>Simple tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F672</entry>
+ <entry></entry>
+ <entry>Retrospective check constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F701</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Referential update actions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F711</entry>
+ <entry></entry>
+ <entry>ALTER domain</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F731</entry>
+ <entry></entry>
+ <entry>INSERT column privileges</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F761</entry>
+ <entry></entry>
+ <entry>Session management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F762</entry>
+ <entry></entry>
+ <entry>CURRENT_CATALOG</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F763</entry>
+ <entry></entry>
+ <entry>CURRENT_SCHEMA</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F771</entry>
+ <entry></entry>
+ <entry>Connection management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F781</entry>
+ <entry></entry>
+ <entry>Self-referencing operations</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F791</entry>
+ <entry></entry>
+ <entry>Insensitive cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F801</entry>
+ <entry></entry>
+ <entry>Full set function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F850</entry>
+ <entry></entry>
+ <entry>Top-level &lt;order by clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F851</entry>
+ <entry></entry>
+ <entry>&lt;order by clause&gt; in subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F852</entry>
+ <entry></entry>
+ <entry>Top-level &lt;order by clause&gt; in views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F855</entry>
+ <entry></entry>
+ <entry>Nested &lt;order by clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F856</entry>
+ <entry></entry>
+ <entry>Nested &lt;fetch first clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F857</entry>
+ <entry></entry>
+ <entry>Top-level &lt;fetch first clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F858</entry>
+ <entry></entry>
+ <entry>&lt;fetch first clause&gt; in subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F859</entry>
+ <entry></entry>
+ <entry>Top-level &lt;fetch first clause&gt; in views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F860</entry>
+ <entry></entry>
+ <entry>&lt;fetch first row count&gt; in &lt;fetch first clause&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F861</entry>
+ <entry></entry>
+ <entry>Top-level &lt;result offset clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F862</entry>
+ <entry></entry>
+ <entry>&lt;result offset clause&gt; in subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F863</entry>
+ <entry></entry>
+ <entry>Nested &lt;result offset clause&gt; in &lt;query expression&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F864</entry>
+ <entry></entry>
+ <entry>Top-level &lt;result offset clause&gt; in views</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F865</entry>
+ <entry></entry>
+ <entry>&lt;offset row count&gt; in &lt;result offset clause&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S071</entry>
+ <entry>Enhanced object support</entry>
+ <entry>SQL paths in function and type name resolution</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S092</entry>
+ <entry></entry>
+ <entry>Arrays of user-defined types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S095</entry>
+ <entry></entry>
+ <entry>Array constructors by query</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S096</entry>
+ <entry></entry>
+ <entry>Optional array bounds</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S098</entry>
+ <entry></entry>
+ <entry>ARRAY_AGG</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S111</entry>
+ <entry>Enhanced object support</entry>
+ <entry>ONLY in query expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S201</entry>
+ <entry></entry>
+ <entry>SQL-invoked routines on arrays</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S201-01</entry>
+ <entry></entry>
+ <entry>Array parameters</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S201-02</entry>
+ <entry></entry>
+ <entry>Array as result type of functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S211</entry>
+ <entry>Enhanced object support</entry>
+ <entry>User-defined cast functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T031</entry>
+ <entry></entry>
+ <entry>BOOLEAN data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T071</entry>
+ <entry></entry>
+ <entry>BIGINT data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T121</entry>
+ <entry></entry>
+ <entry>WITH (excluding RECURSIVE) in query expression</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T122</entry>
+ <entry></entry>
+ <entry>WITH (excluding RECURSIVE) in subquery</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T131</entry>
+ <entry></entry>
+ <entry>Recursive query</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T132</entry>
+ <entry></entry>
+ <entry>Recursive query in subquery</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T141</entry>
+ <entry></entry>
+ <entry>SIMILAR predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T151</entry>
+ <entry></entry>
+ <entry>DISTINCT predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T152</entry>
+ <entry></entry>
+ <entry>DISTINCT predicate with negation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T171</entry>
+ <entry></entry>
+ <entry>LIKE clause in table definition</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T172</entry>
+ <entry></entry>
+ <entry>AS subquery clause in table definition</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T173</entry>
+ <entry></entry>
+ <entry>Extended LIKE clause in table definition</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T191</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Referential action RESTRICT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T201</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Comparable data types for referential constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-01</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>Triggers activated on UPDATE, INSERT, or DELETE of one base table</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-02</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>BEFORE triggers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-03</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>AFTER triggers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-04</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>FOR EACH ROW triggers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-05</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>Ability to specify a search condition that must be true before the trigger is invoked</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-07</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>TRIGGER privilege</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T212</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Enhanced trigger capability</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T231</entry>
+ <entry></entry>
+ <entry>Sensitive cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T241</entry>
+ <entry></entry>
+ <entry>START TRANSACTION statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T271</entry>
+ <entry></entry>
+ <entry>Savepoints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T281</entry>
+ <entry></entry>
+ <entry>SELECT privilege with column granularity</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T312</entry>
+ <entry></entry>
+ <entry>OVERLAY function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-01</entry>
+ <entry>Core</entry>
+ <entry>User-defined functions with no overloading</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-03</entry>
+ <entry>Core</entry>
+ <entry>Function invocation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-06</entry>
+ <entry>Core</entry>
+ <entry>ROUTINES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-07</entry>
+ <entry>Core</entry>
+ <entry>PARAMETERS view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T322</entry>
+ <entry>PSM</entry>
+ <entry>Overloading of SQL-invoked functions and procedures</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T323</entry>
+ <entry></entry>
+ <entry>Explicit security for external routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T351</entry>
+ <entry></entry>
+ <entry>Bracketed SQL comments (/*...*/ comments)</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T441</entry>
+ <entry></entry>
+ <entry>ABS and MOD functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T461</entry>
+ <entry></entry>
+ <entry>Symmetric BETWEEN predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T501</entry>
+ <entry></entry>
+ <entry>Enhanced EXISTS predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T551</entry>
+ <entry></entry>
+ <entry>Optional key words for default syntax</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T581</entry>
+ <entry></entry>
+ <entry>Regular expression substring function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T591</entry>
+ <entry></entry>
+ <entry>UNIQUE constraints of possibly null columns</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T614</entry>
+ <entry></entry>
+ <entry>NTILE function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T615</entry>
+ <entry></entry>
+ <entry>LEAD and LAG functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T617</entry>
+ <entry></entry>
+ <entry>FIRST_VALUE and LAST_VALUE function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T621</entry>
+ <entry></entry>
+ <entry>Enhanced numeric functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T631</entry>
+ <entry>Core</entry>
+ <entry>IN predicate with one list element</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T651</entry>
+ <entry></entry>
+ <entry>SQL-schema statements in SQL routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T655</entry>
+ <entry></entry>
+ <entry>Cyclically dependent routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X010</entry>
+ <entry></entry>
+ <entry>XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X011</entry>
+ <entry></entry>
+ <entry>Arrays of XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X016</entry>
+ <entry></entry>
+ <entry>Persistent XML values</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X020</entry>
+ <entry></entry>
+ <entry>XMLConcat</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X031</entry>
+ <entry></entry>
+ <entry>XMLElement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X032</entry>
+ <entry></entry>
+ <entry>XMLForest</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X034</entry>
+ <entry></entry>
+ <entry>XMLAgg</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X035</entry>
+ <entry></entry>
+ <entry>XMLAgg: ORDER BY option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X036</entry>
+ <entry></entry>
+ <entry>XMLComment</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X037</entry>
+ <entry></entry>
+ <entry>XMLPI</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X040</entry>
+ <entry></entry>
+ <entry>Basic table mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X041</entry>
+ <entry></entry>
+ <entry>Basic table mapping: nulls absent</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X042</entry>
+ <entry></entry>
+ <entry>Basic table mapping: null as nil</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X043</entry>
+ <entry></entry>
+ <entry>Basic table mapping: table as forest</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X044</entry>
+ <entry></entry>
+ <entry>Basic table mapping: table as element</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X045</entry>
+ <entry></entry>
+ <entry>Basic table mapping: with target namespace</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X046</entry>
+ <entry></entry>
+ <entry>Basic table mapping: data mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X047</entry>
+ <entry></entry>
+ <entry>Basic table mapping: metadata mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X048</entry>
+ <entry></entry>
+ <entry>Basic table mapping: base64 encoding of binary strings</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X049</entry>
+ <entry></entry>
+ <entry>Basic table mapping: hex encoding of binary strings</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X050</entry>
+ <entry></entry>
+ <entry>Advanced table mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X051</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: nulls absent</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X052</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: null as nil</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X053</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: table as forest</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X054</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: table as element</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X055</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: target namespace</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X056</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: data mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X057</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: metadata mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X058</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: base64 encoding of binary strings</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X059</entry>
+ <entry></entry>
+ <entry>Advanced table mapping: hex encoding of binary strings</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X060</entry>
+ <entry></entry>
+ <entry>XMLParse: Character string input and CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X061</entry>
+ <entry></entry>
+ <entry>XMLParse: Character string input and DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X070</entry>
+ <entry></entry>
+ <entry>XMLSerialize: Character string serialization and CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X071</entry>
+ <entry></entry>
+ <entry>XMLSerialize: Character string serialization and DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X072</entry>
+ <entry></entry>
+ <entry>XMLSerialize: Character string serialization</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X090</entry>
+ <entry></entry>
+ <entry>XML document predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X120</entry>
+ <entry></entry>
+ <entry>XML parameters in SQL routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X121</entry>
+ <entry></entry>
+ <entry>XML parameters in external routines</entry>
+ <entry></entry>
+ </row>
+</tbody>
diff --git a/doc-xc/src/sgml/features-unsupported.sgmlin b/doc-xc/src/sgml/features-unsupported.sgmlin
new file mode 100644
index 0000000000..671fbec9df
--- /dev/null
+++ b/doc-xc/src/sgml/features-unsupported.sgmlin
@@ -0,0 +1,1826 @@
+<tbody>
+ <row>
+ <entry>B011</entry>
+ <entry></entry>
+ <entry>Embedded Ada</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B013</entry>
+ <entry></entry>
+ <entry>Embedded COBOL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B014</entry>
+ <entry></entry>
+ <entry>Embedded Fortran</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B015</entry>
+ <entry></entry>
+ <entry>Embedded MUMPS</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B016</entry>
+ <entry></entry>
+ <entry>Embedded Pascal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B017</entry>
+ <entry></entry>
+ <entry>Embedded PL/I</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B031</entry>
+ <entry></entry>
+ <entry>Basic dynamic SQL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B032</entry>
+ <entry></entry>
+ <entry>Extended dynamic SQL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B032-01</entry>
+ <entry></entry>
+ <entry>&lt;describe input statement&gt;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B033</entry>
+ <entry></entry>
+ <entry>Untyped SQL-invoked function arguments</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B034</entry>
+ <entry></entry>
+ <entry>Dynamic specification of cursor attributes</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B035</entry>
+ <entry></entry>
+ <entry>Non-extended descriptor names</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B041</entry>
+ <entry></entry>
+ <entry>Extensions to embedded SQL exception declarations</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B051</entry>
+ <entry></entry>
+ <entry>Enhanced execution rights</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B111</entry>
+ <entry></entry>
+ <entry>Module language Ada</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B112</entry>
+ <entry></entry>
+ <entry>Module language C</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B113</entry>
+ <entry></entry>
+ <entry>Module language COBOL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B114</entry>
+ <entry></entry>
+ <entry>Module language Fortran</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B115</entry>
+ <entry></entry>
+ <entry>Module language MUMPS</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B116</entry>
+ <entry></entry>
+ <entry>Module language Pascal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B117</entry>
+ <entry></entry>
+ <entry>Module language PL/I</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B121</entry>
+ <entry></entry>
+ <entry>Routine language Ada</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B122</entry>
+ <entry></entry>
+ <entry>Routine language C</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B123</entry>
+ <entry></entry>
+ <entry>Routine language COBOL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B124</entry>
+ <entry></entry>
+ <entry>Routine language Fortran</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B125</entry>
+ <entry></entry>
+ <entry>Routine language MUMPS</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B126</entry>
+ <entry></entry>
+ <entry>Routine language Pascal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B127</entry>
+ <entry></entry>
+ <entry>Routine language PL/I</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>B128</entry>
+ <entry></entry>
+ <entry>Routine language SQL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081</entry>
+ <entry>Core</entry>
+ <entry>Basic Privileges</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E081-09</entry>
+ <entry>Core</entry>
+ <entry>USAGE privilege</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E153</entry>
+ <entry>Core</entry>
+ <entry>Updatable queries with subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>E182</entry>
+ <entry>Core</entry>
+ <entry>Module language</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F121</entry>
+ <entry></entry>
+ <entry>Basic diagnostics management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F121-01</entry>
+ <entry></entry>
+ <entry>GET DIAGNOSTICS statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F121-02</entry>
+ <entry></entry>
+ <entry>SET TRANSACTION statement: DIAGNOSTICS SIZE clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F122</entry>
+ <entry></entry>
+ <entry>Enhanced diagnostics management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F123</entry>
+ <entry></entry>
+ <entry>All diagnostics</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F181</entry>
+ <entry>Core</entry>
+ <entry>Multiple module support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F202</entry>
+ <entry></entry>
+ <entry>TRUNCATE TABLE: identity column restart option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F262</entry>
+ <entry></entry>
+ <entry>Extended CASE expression</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F263</entry>
+ <entry></entry>
+ <entry>Comma-separated predicates in simple CASE expression</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F291</entry>
+ <entry></entry>
+ <entry>UNIQUE predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F301</entry>
+ <entry></entry>
+ <entry>CORRESPONDING in query expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311</entry>
+ <entry>Core</entry>
+ <entry>Schema definition statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F311-04</entry>
+ <entry>Core</entry>
+ <entry>CREATE VIEW: WITH CHECK OPTION</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F312</entry>
+ <entry></entry>
+ <entry>MERGE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F313</entry>
+ <entry></entry>
+ <entry>Enhanced MERGE statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F341</entry>
+ <entry></entry>
+ <entry>Usage tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F394</entry>
+ <entry></entry>
+ <entry>Optional normal form specification</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F403</entry>
+ <entry></entry>
+ <entry>Partitioned joined tables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F451</entry>
+ <entry></entry>
+ <entry>Character set definition</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F461</entry>
+ <entry></entry>
+ <entry>Named character sets</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F521</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Assertions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F641</entry>
+ <entry></entry>
+ <entry>Row and table constructors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F671</entry>
+ <entry>Enhanced integrity management</entry>
+ <entry>Subqueries in CHECK</entry>
+ <entry>intentionally omitted</entry>
+ </row>
+ <row>
+ <entry>F690</entry>
+ <entry></entry>
+ <entry>Collation support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F692</entry>
+ <entry></entry>
+ <entry>Enhanced collation support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F693</entry>
+ <entry></entry>
+ <entry>SQL-session and client module collations</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F695</entry>
+ <entry></entry>
+ <entry>Translation support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F696</entry>
+ <entry></entry>
+ <entry>Additional translation documentation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F721</entry>
+ <entry></entry>
+ <entry>Deferrable constraints</entry>
+ <entry>foreign and unique keys only</entry>
+ </row>
+ <row>
+ <entry>F741</entry>
+ <entry></entry>
+ <entry>Referential MATCH types</entry>
+ <entry>no partial match yet</entry>
+ </row>
+ <row>
+ <entry>F751</entry>
+ <entry></entry>
+ <entry>View CHECK enhancements</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F812</entry>
+ <entry>Core</entry>
+ <entry>Basic flagging</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F813</entry>
+ <entry></entry>
+ <entry>Extended flagging</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F821</entry>
+ <entry></entry>
+ <entry>Local table references</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F831</entry>
+ <entry></entry>
+ <entry>Full cursor update</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F831-01</entry>
+ <entry></entry>
+ <entry>Updatable scrollable cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F831-02</entry>
+ <entry></entry>
+ <entry>Updatable ordered cursors</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F841</entry>
+ <entry></entry>
+ <entry>LIKE_REGEX predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F842</entry>
+ <entry></entry>
+ <entry>OCCURENCES_REGEX function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F843</entry>
+ <entry></entry>
+ <entry>POSITION_REGEX function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F844</entry>
+ <entry></entry>
+ <entry>SUBSTRING_REGEX function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F845</entry>
+ <entry></entry>
+ <entry>TRANSLATE_REGEX function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F846</entry>
+ <entry></entry>
+ <entry>Octet support in regular expression operators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>F847</entry>
+ <entry></entry>
+ <entry>Nonconstant regular expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S011</entry>
+ <entry>Core</entry>
+ <entry>Distinct data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S011-01</entry>
+ <entry>Core</entry>
+ <entry>USER_DEFINED_TYPES view</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S023</entry>
+ <entry>Basic object support</entry>
+ <entry>Basic structured types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S024</entry>
+ <entry>Enhanced object support</entry>
+ <entry>Enhanced structured types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S025</entry>
+ <entry></entry>
+ <entry>Final structured types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S026</entry>
+ <entry></entry>
+ <entry>Self-referencing structured types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S027</entry>
+ <entry></entry>
+ <entry>Create method by specific method name</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S028</entry>
+ <entry></entry>
+ <entry>Permutable UDT options list</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S041</entry>
+ <entry>Basic object support</entry>
+ <entry>Basic reference types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S043</entry>
+ <entry>Enhanced object support</entry>
+ <entry>Enhanced reference types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S051</entry>
+ <entry>Basic object support</entry>
+ <entry>Create table of type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S081</entry>
+ <entry>Enhanced object support</entry>
+ <entry>Subtables</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S091</entry>
+ <entry></entry>
+ <entry>Basic array support</entry>
+ <entry>partially supported</entry>
+ </row>
+ <row>
+ <entry>S091-01</entry>
+ <entry></entry>
+ <entry>Arrays of built-in data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S091-02</entry>
+ <entry></entry>
+ <entry>Arrays of distinct types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S091-03</entry>
+ <entry></entry>
+ <entry>Array expressions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S094</entry>
+ <entry></entry>
+ <entry>Arrays of reference types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S097</entry>
+ <entry></entry>
+ <entry>Array element assignment</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S151</entry>
+ <entry>Basic object support</entry>
+ <entry>Type predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S161</entry>
+ <entry>Enhanced object support</entry>
+ <entry>Subtype treatment</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S162</entry>
+ <entry></entry>
+ <entry>Subtype treatment for references</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S202</entry>
+ <entry></entry>
+ <entry>SQL-invoked routines on multisets</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S231</entry>
+ <entry>Enhanced object support</entry>
+ <entry>Structured type locators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S232</entry>
+ <entry></entry>
+ <entry>Array locators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S233</entry>
+ <entry></entry>
+ <entry>Multiset locators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S241</entry>
+ <entry></entry>
+ <entry>Transform functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S242</entry>
+ <entry></entry>
+ <entry>Alter transform statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S251</entry>
+ <entry></entry>
+ <entry>User-defined orderings</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S261</entry>
+ <entry></entry>
+ <entry>Specific type method</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S271</entry>
+ <entry></entry>
+ <entry>Basic multiset support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S272</entry>
+ <entry></entry>
+ <entry>Multisets of user-defined types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S274</entry>
+ <entry></entry>
+ <entry>Multisets of reference types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S275</entry>
+ <entry></entry>
+ <entry>Advanced multiset support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S281</entry>
+ <entry></entry>
+ <entry>Nested collection types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S291</entry>
+ <entry></entry>
+ <entry>Unique constraint on entire row</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S301</entry>
+ <entry></entry>
+ <entry>Enhanced UNNEST</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S401</entry>
+ <entry></entry>
+ <entry>Distinct types based on array types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S402</entry>
+ <entry></entry>
+ <entry>Distinct types based on distinct types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S403</entry>
+ <entry></entry>
+ <entry>MAX_CARDINALITY</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>S404</entry>
+ <entry></entry>
+ <entry>TRIM_ARRAY</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T011</entry>
+ <entry></entry>
+ <entry>Timestamp in Information Schema</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T021</entry>
+ <entry></entry>
+ <entry>BINARY and VARBINARY data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T022</entry>
+ <entry></entry>
+ <entry>Advanced support for BINARY and VARBINARY data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T023</entry>
+ <entry></entry>
+ <entry>Compound binary literal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T024</entry>
+ <entry></entry>
+ <entry>Spaces in binary literals</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041</entry>
+ <entry>Basic object support</entry>
+ <entry>Basic LOB data type support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041-01</entry>
+ <entry>Basic object support</entry>
+ <entry>BLOB data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041-02</entry>
+ <entry>Basic object support</entry>
+ <entry>CLOB data type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041-03</entry>
+ <entry>Basic object support</entry>
+ <entry>POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING functions for LOB data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041-04</entry>
+ <entry>Basic object support</entry>
+ <entry>Concatenation of LOB data types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T041-05</entry>
+ <entry>Basic object support</entry>
+ <entry>LOB locator: non-holdable</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T042</entry>
+ <entry></entry>
+ <entry>Extended LOB data type support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T043</entry>
+ <entry></entry>
+ <entry>Multiplier T</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T044</entry>
+ <entry></entry>
+ <entry>Multiplier P</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T051</entry>
+ <entry></entry>
+ <entry>Row types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T052</entry>
+ <entry></entry>
+ <entry>MAX and MIN for row types</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T053</entry>
+ <entry></entry>
+ <entry>Explicit aliases for all-fields reference</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T061</entry>
+ <entry></entry>
+ <entry>UCS support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T101</entry>
+ <entry></entry>
+ <entry>Enhanced nullability determiniation</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T111</entry>
+ <entry></entry>
+ <entry>Updatable joins, unions, and columns</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T174</entry>
+ <entry></entry>
+ <entry>Identity columns</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T175</entry>
+ <entry></entry>
+ <entry>Generated columns</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T176</entry>
+ <entry></entry>
+ <entry>Sequence generator support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T177</entry>
+ <entry></entry>
+ <entry>Sequence generator support: simple restart option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T178</entry>
+ <entry></entry>
+ <entry>Identity columns: simple restart option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>Basic trigger capability</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-06</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>Support for run-time rules for the interaction of triggers and constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T211-08</entry>
+ <entry>Active database, Enhanced integrity management</entry>
+ <entry>Multiple triggers for the same event are executed in the order in which they were created in the catalog</entry>
+ <entry>intentionally omitted</entry>
+ </row>
+ <row>
+ <entry>T213</entry>
+ <entry></entry>
+ <entry>INSTEAD OF triggers</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T251</entry>
+ <entry></entry>
+ <entry>SET TRANSACTION statement: LOCAL option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T261</entry>
+ <entry></entry>
+ <entry>Chained transactions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T272</entry>
+ <entry></entry>
+ <entry>Enhanced savepoint management</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T285</entry>
+ <entry></entry>
+ <entry>Enhanced derived column names</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T301</entry>
+ <entry></entry>
+ <entry>Functional dependencies</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321</entry>
+ <entry>Core</entry>
+ <entry>Basic SQL-invoked routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-02</entry>
+ <entry>Core</entry>
+ <entry>User-defined stored procedures with no overloading</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-04</entry>
+ <entry>Core</entry>
+ <entry>CALL statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T321-05</entry>
+ <entry>Core</entry>
+ <entry>RETURN statement</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T324</entry>
+ <entry></entry>
+ <entry>Explicit security for SQL routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T325</entry>
+ <entry></entry>
+ <entry>Qualified SQL parameter references</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T326</entry>
+ <entry></entry>
+ <entry>Table functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T331</entry>
+ <entry></entry>
+ <entry>Basic roles</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T332</entry>
+ <entry></entry>
+ <entry>Extended roles</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T431</entry>
+ <entry>OLAP</entry>
+ <entry>Extended grouping capabilities</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T432</entry>
+ <entry></entry>
+ <entry>Nested and concatenated GROUPING SETS</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T433</entry>
+ <entry></entry>
+ <entry>Multiargument GROUPING function</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T434</entry>
+ <entry></entry>
+ <entry>GROUP BY DISTINCT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T471</entry>
+ <entry></entry>
+ <entry>Result sets return value</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T491</entry>
+ <entry></entry>
+ <entry>LATERAL derived table</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T511</entry>
+ <entry></entry>
+ <entry>Transaction counts</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T541</entry>
+ <entry></entry>
+ <entry>Updatable table references</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T561</entry>
+ <entry></entry>
+ <entry>Holdable locators</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T571</entry>
+ <entry></entry>
+ <entry>Array-returning external SQL-invoked functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T572</entry>
+ <entry></entry>
+ <entry>Multiset-returning external SQL-invoked functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T601</entry>
+ <entry></entry>
+ <entry>Local cursor references</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T611</entry>
+ <entry>OLAP</entry>
+ <entry>Elementary OLAP operations</entry>
+ <entry>most forms supported</entry>
+ </row>
+ <row>
+ <entry>T612</entry>
+ <entry></entry>
+ <entry>Advanced OLAP operations</entry>
+ <entry>some forms supported</entry>
+ </row>
+ <row>
+ <entry>T613</entry>
+ <entry></entry>
+ <entry>Sampling</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T616</entry>
+ <entry></entry>
+ <entry>Null treatment option for LEAD and LAG functions</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T618</entry>
+ <entry></entry>
+ <entry>NTH_VALUE function</entry>
+ <entry>function exists, but some options missing</entry>
+ </row>
+ <row>
+ <entry>T641</entry>
+ <entry></entry>
+ <entry>Multiple column assignment</entry>
+ <entry>only some syntax variants supported</entry>
+ </row>
+ <row>
+ <entry>T652</entry>
+ <entry></entry>
+ <entry>SQL-dynamic statements in SQL routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T653</entry>
+ <entry></entry>
+ <entry>SQL-schema statements in external routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>T654</entry>
+ <entry></entry>
+ <entry>SQL-dynamic statements in external routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M001</entry>
+ <entry></entry>
+ <entry>Datalinks</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M002</entry>
+ <entry></entry>
+ <entry>Datalinks via SQL/CLI</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M003</entry>
+ <entry></entry>
+ <entry>Datalinks via Embedded SQL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M004</entry>
+ <entry></entry>
+ <entry>Foreign data support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M005</entry>
+ <entry></entry>
+ <entry>Foreign schema support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M006</entry>
+ <entry></entry>
+ <entry>GetSQLString routine</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M007</entry>
+ <entry></entry>
+ <entry>TransmitRequest</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M009</entry>
+ <entry></entry>
+ <entry>GetOpts and GetStatistics routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M010</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M011</entry>
+ <entry></entry>
+ <entry>Datalinks via Ada</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M012</entry>
+ <entry></entry>
+ <entry>Datalinks via C</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M013</entry>
+ <entry></entry>
+ <entry>Datalinks via COBOL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M014</entry>
+ <entry></entry>
+ <entry>Datalinks via Fortran</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M015</entry>
+ <entry></entry>
+ <entry>Datalinks via M</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M016</entry>
+ <entry></entry>
+ <entry>Datalinks via Pascal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M017</entry>
+ <entry></entry>
+ <entry>Datalinks via PL/I</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M018</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in Ada</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M019</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in C</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M020</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in COBOL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M021</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in Fortran</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M022</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in MUMPS</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M023</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in Pascal</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M024</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper interface routines in PL/I</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M030</entry>
+ <entry></entry>
+ <entry>SQL-server foreign data support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>M031</entry>
+ <entry></entry>
+ <entry>Foreign data wrapper general routines</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X012</entry>
+ <entry></entry>
+ <entry>Multisets of XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X013</entry>
+ <entry></entry>
+ <entry>Distinct types of XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X014</entry>
+ <entry></entry>
+ <entry>Attributes of XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X015</entry>
+ <entry></entry>
+ <entry>Fields of XML type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X025</entry>
+ <entry></entry>
+ <entry>XMLCast</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X030</entry>
+ <entry></entry>
+ <entry>XMLDocument</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X038</entry>
+ <entry></entry>
+ <entry>XMLText</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X065</entry>
+ <entry></entry>
+ <entry>XMLParse: BLOB input and CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X066</entry>
+ <entry></entry>
+ <entry>XMLParse: BLOB input and DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X068</entry>
+ <entry></entry>
+ <entry>XMLSerialize: BOM</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X069</entry>
+ <entry></entry>
+ <entry>XMLSerialize: INDENT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X073</entry>
+ <entry></entry>
+ <entry>XMLSerialize: BLOB serialization and CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X074</entry>
+ <entry></entry>
+ <entry>XMLSerialize: BLOB serialization and DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X075</entry>
+ <entry></entry>
+ <entry>XMLSerialize: BLOB serialization</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X076</entry>
+ <entry></entry>
+ <entry>XMLSerialize: VERSION</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X077</entry>
+ <entry></entry>
+ <entry>XMLSerialize: explicit ENCODING option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X078</entry>
+ <entry></entry>
+ <entry>XMLSerialize: explicit XML declaration</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X080</entry>
+ <entry></entry>
+ <entry>Namespaces in XML publishing</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X081</entry>
+ <entry></entry>
+ <entry>Query-level XML namespace declarations</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X082</entry>
+ <entry></entry>
+ <entry>XML namespace declarations in DML</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X083</entry>
+ <entry></entry>
+ <entry>XML namespace declarations in DDL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X084</entry>
+ <entry></entry>
+ <entry>XML namespace declarations in compound statements</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X085</entry>
+ <entry></entry>
+ <entry>Predefined namespace prefixes</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X086</entry>
+ <entry></entry>
+ <entry>XML namespace declarations in XMLTable</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X091</entry>
+ <entry></entry>
+ <entry>XML content predicate</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X096</entry>
+ <entry></entry>
+ <entry>XMLExists</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X100</entry>
+ <entry></entry>
+ <entry>Host language support for XML: CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X101</entry>
+ <entry></entry>
+ <entry>Host language support for XML: DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X110</entry>
+ <entry></entry>
+ <entry>Host language support for XML: VARCHAR mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X111</entry>
+ <entry></entry>
+ <entry>Host language support for XML: CLOB mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X112</entry>
+ <entry></entry>
+ <entry>Host language support for XML: BLOB mapping</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X113</entry>
+ <entry></entry>
+ <entry>Host language support for XML: STRIP WHITESPACE option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X114</entry>
+ <entry></entry>
+ <entry>Host language support for XML: PRESERVE WHITESPACE option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X131</entry>
+ <entry></entry>
+ <entry>Query-level XMLBINARY clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X132</entry>
+ <entry></entry>
+ <entry>XMLBINARY clause in DML</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X133</entry>
+ <entry></entry>
+ <entry>XMLBINARY clause in DDL</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X134</entry>
+ <entry></entry>
+ <entry>XMLBINARY clause in compound statements</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X135</entry>
+ <entry></entry>
+ <entry>XMLBINARY clause in subqueries</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X141</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: data-driven case</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X142</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: ACCORDING TO clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X143</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X144</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: schema location</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X145</entry>
+ <entry></entry>
+ <entry>IS VALID predicate outside check constraints</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X151</entry>
+ <entry></entry>
+ <entry>IS VALID predicate with DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X152</entry>
+ <entry></entry>
+ <entry>IS VALID predicate with CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X153</entry>
+ <entry></entry>
+ <entry>IS VALID predicate with SEQUENCE option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X155</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: NAMESPACE without ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X157</entry>
+ <entry></entry>
+ <entry>IS VALID predicate: NO NAMESPACE with ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X160</entry>
+ <entry></entry>
+ <entry>Basic Information Schema for registered XML Schemas</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X161</entry>
+ <entry></entry>
+ <entry>Advanced Information Schema for registered XML Schemas</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X170</entry>
+ <entry></entry>
+ <entry>XML null handling options</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X171</entry>
+ <entry></entry>
+ <entry>NIL ON NO CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X181</entry>
+ <entry></entry>
+ <entry>XML(DOCUMENT(UNTYPED)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X182</entry>
+ <entry></entry>
+ <entry>XML(DOCUMENT(ANY)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X190</entry>
+ <entry></entry>
+ <entry>XML(SEQUENCE) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X191</entry>
+ <entry></entry>
+ <entry>XML(DOCUMENT(XMLSCHEMA)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X192</entry>
+ <entry></entry>
+ <entry>XML(CONTENT(XMLSCHEMA)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X200</entry>
+ <entry></entry>
+ <entry>XMLQuery</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X201</entry>
+ <entry></entry>
+ <entry>XMLQuery: RETURNING CONTENT</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X202</entry>
+ <entry></entry>
+ <entry>XMLQuery: RETURNING SEQUENCE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X203</entry>
+ <entry></entry>
+ <entry>XMLQuery: passing a context item</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X204</entry>
+ <entry></entry>
+ <entry>XMLQuery: initializing an XQuery variable</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X205</entry>
+ <entry></entry>
+ <entry>XMLQuery: EMPTY ON EMPTY option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X206</entry>
+ <entry></entry>
+ <entry>XMLQuery: NULL ON EMPTY option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X211</entry>
+ <entry></entry>
+ <entry>XML 1.1 support</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X221</entry>
+ <entry></entry>
+ <entry>XML passing mechanism BY VALUE</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X222</entry>
+ <entry></entry>
+ <entry>XML passing mechanism BY REF</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X231</entry>
+ <entry></entry>
+ <entry>XML(CONTENT(UNTYPED)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X232</entry>
+ <entry></entry>
+ <entry>XML(CONTENT(ANY)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X241</entry>
+ <entry></entry>
+ <entry>RETURNING CONTENT in XML publishing</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X242</entry>
+ <entry></entry>
+ <entry>RETURNING SEQUENCE in XML publishing</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X251</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(DOCUMENT(UNTYPED)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X252</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(DOCUMENT(ANY)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X253</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(CONTENT(UNTYPED)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X254</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(CONTENT(ANY)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X255</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(SEQUENCE) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X256</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(DOCUMENT(XMLSCHEMA)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X257</entry>
+ <entry></entry>
+ <entry>Persistent XML values of XML(CONTENT(XMLSCHEMA)) type</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X260</entry>
+ <entry></entry>
+ <entry>XML type: ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X261</entry>
+ <entry></entry>
+ <entry>XML type: NAMESPACE without ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X263</entry>
+ <entry></entry>
+ <entry>XML type: NO NAMESPACE with ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X264</entry>
+ <entry></entry>
+ <entry>XML type: schema location</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X271</entry>
+ <entry></entry>
+ <entry>XMLValidate: data-driven case</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X272</entry>
+ <entry></entry>
+ <entry>XMLValidate: ACCORDING TO clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X273</entry>
+ <entry></entry>
+ <entry>XMLValidate: ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X274</entry>
+ <entry></entry>
+ <entry>XMLValidate: schema location</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X281</entry>
+ <entry></entry>
+ <entry>XMLValidate: with DOCUMENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X282</entry>
+ <entry></entry>
+ <entry>XMLValidate with CONTENT option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X283</entry>
+ <entry></entry>
+ <entry>XMLValidate with SEQUENCE option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X284</entry>
+ <entry></entry>
+ <entry>XMLValidate NAMESPACE without ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X286</entry>
+ <entry></entry>
+ <entry>XMLValidate: NO NAMESPACE with ELEMENT clause</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X300</entry>
+ <entry></entry>
+ <entry>XMLTable</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X301</entry>
+ <entry></entry>
+ <entry>XMLTable: derived column list option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X302</entry>
+ <entry></entry>
+ <entry>XMLTable: ordinality column option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X303</entry>
+ <entry></entry>
+ <entry>XMLTable: column default option</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X304</entry>
+ <entry></entry>
+ <entry>XMLTable: passing a context item</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X305</entry>
+ <entry></entry>
+ <entry>XMLTable: initializing an XQuery variable</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>X400</entry>
+ <entry></entry>
+ <entry>Name and identifier mapping</entry>
+ <entry></entry>
+ </row>
+</tbody>
diff --git a/doc-xc/src/sgml/filelist.sgmlin b/doc-xc/src/sgml/filelist.sgmlin
index 84d245c29d..107bc1b1cd 100644
--- a/doc-xc/src/sgml/filelist.sgmlin
+++ b/doc-xc/src/sgml/filelist.sgmlin
@@ -13,6 +13,13 @@
<!entity common SYSTEM "common.sgml">
<!entity xc-constraint SYSTEM "xc-constraint.sgml">
<!## end>
+<!## XL>
+<!entity pgnotice SYSTEM "pgnotice.sgml">
+<!entity xlonly SYSTEM "xlonly.sgml">
+<!entity pgonly SYSTEM "pgonly.sgml">
+<!entity common SYSTEM "common.sgml">
+<!entity xc-constraint SYSTEM "xc-constraint.sgml">
+<!## end>
<!-- tutorial -->
<!ENTITY advanced SYSTEM "advanced.sgml">
@@ -56,6 +63,8 @@
<!ENTITY config SYSTEM "config.sgml">
<!ENTITY user-manag SYSTEM "user-manag.sgml">
<!ENTITY wal SYSTEM "wal.sgml">
+<!ENTITY add-node SYSTEM "add-node.sgml">
+<!ENTITY remove-node SYSTEM "remove-node.sgml">
<!-- programmer's guide -->
<!ENTITY dfunc SYSTEM "dfunc.sgml">
@@ -140,6 +149,13 @@
<!ENTITY pgupgrade SYSTEM "pgupgrade.sgml">
<!## XC>
<!ENTITY pgxcclean SYSTEM "pgxcclean.sgml">
+<!ENTITY pgxcctl SYSTEM "pgxc_ctl-ref.sgml">
+<!ENTITY pgxcddl SYSTEM "pgxcddl.sgml">
+<!ENTITY pgxcmonitor SYSTEM "pgxcmonitor.sgml">
+<!## end>
+<!## XL>
+<!ENTITY pgxcclean SYSTEM "pgxcclean.sgml">
+<!ENTITY pgxcctl SYSTEM "pgxc_ctl-ref.sgml">
<!ENTITY pgxcddl SYSTEM "pgxcddl.sgml">
<!ENTITY pgxcmonitor SYSTEM "pgxcmonitor.sgml">
<!## end>
@@ -168,6 +184,9 @@
<!## XC>
<!ENTITY release-xc-1.0 SYSTEM "release-xc-1.0.sgml">
<!## end>
+<!## XL>
+<!ENTITY release-xl-9.2 SYSTEM "release-xl-9.2.sgml">
+<!## end>
<!## PG>
<!ENTITY release-9.1 SYSTEM "release-9.1.sgml">
<!ENTITY release-9.0 SYSTEM "release-9.0.sgml">
diff --git a/doc-xc/src/sgml/func.sgmlin b/doc-xc/src/sgml/func.sgmlin
index 797c7c85ba..6cc9f78c8b 100644
--- a/doc-xc/src/sgml/func.sgmlin
+++ b/doc-xc/src/sgml/func.sgmlin
@@ -19,6 +19,9 @@
<!## XC>
<productname>Postgres-XC</productname> inherits a large number of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> inherits a large number of
+<!## end>
functions and operators for the built-in data types. Users can also
define their own functions and operators, as described in
<xref linkend="server-programming">. The
@@ -344,6 +347,9 @@
<!## XC>
<productname>Postgres-XC</productname> will convert <literal>x =
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will convert <literal>x =
+<!## end>
NULL</literal> clauses to <literal>x IS NULL</literal>.
</para>
</tip>
@@ -460,6 +466,9 @@
<!## XC>
<productname>Postgres-XC</productname> types. For types without
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> types. For types without
+<!## end>
standard mathematical conventions
(e.g., date/time types) we
describe the actual behavior in subsequent sections.
@@ -1101,6 +1110,9 @@
<!## XC>
<productname>Postgres-XC</> also provides versions of these functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> also provides versions of these functions
+<!## end>
that use the regular function invocation syntax
(see <xref linkend="functions-string-other">).
</para>
@@ -2880,6 +2892,9 @@
<!## XC>
<productname>Postgres-XC</> also provides versions of these functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> also provides versions of these functions
+<!## end>
that use the regular function invocation syntax
(see <xref linkend="functions-binarystring-other">).
</para>
@@ -3329,6 +3344,9 @@ cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation>
<!## XC>
by <productname>Postgres-XC</productname>: the traditional
<!## end>
+<!## XL>
+ by <productname>Postgres-XL</productname>: the traditional
+<!## end>
<acronym>SQL</acronym> <function>LIKE</function> operator, the
more recent <function>SIMILAR TO</function> operator (added in
SQL:1999), and <acronym>POSIX</acronym>-style regular
@@ -3433,6 +3451,9 @@ cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation>
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
<para>
@@ -3448,6 +3469,9 @@ cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation>
<!## XC>
<productname>Postgres-XC</productname>-specific.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>-specific.
+<!## end>
</para>
</sect2>
@@ -3926,6 +3950,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
<productname>Postgres-XC</productname>'s regular expressions are implemented
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s regular expressions are implemented
+<!## end>
using a software package written by Henry Spencer. Much of
the description of regular expressions below is copied verbatim from his
manual.
@@ -3944,6 +3971,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
<productname>Postgres-XC</productname> supports both forms, and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports both forms, and
+<!## end>
also implements some extensions
that are not in the POSIX standard, but have become widely used
due to their availability in programming languages such as Perl and Tcl.
@@ -3964,6 +3994,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
<productname>Postgres-XC</> always initially presumes that a regular
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> always initially presumes that a regular
+<!## end>
expression follows the ARE rules. However, the more limited ERE or
BRE rules can be chosen by prepending an <firstterm>embedded option</>
to the RE pattern, as described in <xref linkend="posix-metasyntax">.
@@ -4090,6 +4123,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
meaning in <productname>Postgres-XC</> string literals.
<!## end>
+<!## XL>
+ meaning in <productname>Postgres-XL</> string literals.
+<!## end>
To write a pattern constant that contains a backslash,
you must write two backslashes in the statement, assuming escape
string syntax is used (see <xref linkend="sql-syntax-strings">).
@@ -4305,6 +4341,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
<productname>Postgres-XC</> currently does not support multi-character collating
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> currently does not support multi-character collating
+<!## end>
elements. This information describes possible future behavior.
</para>
</note>
@@ -4720,6 +4759,9 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
<!## XC>
<productname>Postgres-XC</>, since REs are assumed to be AREs;
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>, since REs are assumed to be AREs;
+<!## end>
but it does have an effect if ERE or BRE mode had been specified by
the <replaceable>flags</> parameter to a regex function.)
If an RE begins with <literal>***=</>,
@@ -5163,6 +5205,9 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
<!## XC>
The <productname>Postgres-XC</productname> formatting functions
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> formatting functions
+<!## end>
provide a powerful set of tools for converting various data types
(date/time, integer, floating point, numeric) to formatted strings
and for converting from formatted strings to specific data types.
@@ -5569,6 +5614,9 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
<!## XC>
fixed-width. In <productname>Postgres-XC</productname>,
<!## end>
+<!## XL>
+ fixed-width. In <productname>Postgres-XL</productname>,
+<!## end>
<literal>FM</literal> modifies only the next specification, while in
Oracle <literal>FM</literal> affects all subsequent
specifications, and repeated <literal>FM</literal> modifiers
@@ -5848,6 +5896,9 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
<!## XC>
<literal>TH</literal> are <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <literal>TH</literal> are <productname>Postgres-XL</productname>
+<!## end>
extensions.
</para>
</listitem>
@@ -6625,6 +6676,9 @@ SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS
<!## XC>
days. <productname>Postgres-XC</>'s approach uses the month from the
<!## end>
+<!## XL>
+ days. <productname>Postgres-XL</>'s approach uses the month from the
+<!## end>
earlier of the two dates when calculating partial months. For example,
<literal>age('2004-06-01', '2004-04-30')</> uses April to yield
<literal>1 mon 1 day</>, while using May would yield <literal>1 mon 2
@@ -7242,6 +7296,9 @@ SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
<!## XC>
<productname>Postgres-XC</productname> provides a number of functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides a number of functions
+<!## end>
that return values related to the current date and time. These
SQL-standard functions all return values based on the start time of
the current transaction:
@@ -7320,6 +7377,9 @@ SELECT LOCALTIMESTAMP;
<!## XC>
<productname>Postgres-XC</productname> also provides functions that
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also provides functions that
+<!## end>
return the start time of the current statement, as well as the actual
current time at the instant the function is called. The complete list
of non-SQL-standard time functions is:
@@ -7351,6 +7411,9 @@ now()
<!## XC>
<productname>Postgres-XC</productname> function. Like
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> function. Like
+<!## end>
<function>clock_timestamp()</>, it returns the actual current time,
but as a formatted <type>text</> string rather than a <type>timestamp
with time zone</> value.
@@ -7360,6 +7423,9 @@ now()
<!## XC>
<function>now()</> is a traditional <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <function>now()</> is a traditional <productname>Postgres-XL</productname>
+<!## end>
equivalent to <function>transaction_timestamp()</function>.
</para>
@@ -8422,6 +8488,9 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
<!## XC>
explanation of <productname>Postgres-XC</productname>'s text search
<!## end>
+<!## XL>
+ explanation of <productname>Postgres-XL</productname>'s text search
+<!## end>
facility.
</para>
@@ -9032,6 +9101,9 @@ SELECT xmlelement(name foo, xmlattributes('xyz' as bar),
<!## XC>
SQL and Postgres-XC data types with the XML Schema specification,
<!## end>
+<!## XL>
+ SQL and Postgres-XL data types with the XML Schema specification,
+<!## end>
at which point a more precise description will appear.
</para>
</sect3>
@@ -9383,6 +9455,9 @@ SELECT xml_is_well_formed_document('<pg:foo xmlns:pg="http://postgresql.org/stuf
<!## XC>
To process values of data type <type>xml</type>, Postgres-XC offers
<!## end>
+<!## XL>
+ To process values of data type <type>xml</type>, Postgres-XL offers
+<!## end>
the functions <function>xpath</function> and
<function>xpath_exists</function>, which evaluate XPath 1.0
expressions.
@@ -9752,6 +9827,9 @@ table2-mapping
<!## XC>
This section describes <productname>Postgres-XC</productname>'s
<!## end>
+<!## XL>
+ This section describes <productname>Postgres-XL</productname>'s
+<!## end>
functions for operating on <firstterm>sequence objects</firstterm>.
Sequence objects (also called sequence generators or just
sequences) are special single-row tables created with <xref
@@ -9986,6 +10064,9 @@ SELECT setval('foo', 42, false); <lineannotation>Next <function>nextval</> wi
<!## XC>
available in <productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ available in <productname>Postgres-XL</productname>.
+<!## end>
</para>
<tip>
@@ -10894,6 +10975,9 @@ SELECT count(*) FROM sometable;
<!## XC>
will be executed by <productname>Postgres-XC</productname> using a
<!## end>
+<!## XL>
+ will be executed by <productname>Postgres-XL</productname> using a
+<!## end>
sequential scan of the entire table.
</para>
</note>
@@ -11595,6 +11679,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
<!## XC>
<productname>Postgres-XC</productname>: the behavior is always the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>: the behavior is always the
+<!## end>
same as the standard's default, namely <literal>RESPECT NULLS</>.
Likewise, the standard's <literal>FROM FIRST</> or <literal>FROM LAST</>
option for <function>nth_value</> is not implemented: only the
@@ -11645,6 +11732,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
<!## XC>
expressions available in <productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ expressions available in <productname>Postgres-XL</productname>.
+<!## end>
All of the expression forms documented in this section return
Boolean (true/false) results.
</para>
@@ -12014,6 +12104,9 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2);
<!## XC>
<productname>Postgres-XC</productname> extensions; the rest are
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions; the rest are
+<!## end>
<acronym>SQL</acronym>-compliant.
All of the expression forms documented in this section return
Boolean (true/false) results.
@@ -12252,6 +12345,9 @@ AND
<!## XC>
<productname>Postgres-XC</productname> does this only when comparing the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> does this only when comparing the
+<!## end>
results of two row constructors or comparing a row constructor to the
output of a subquery (as in <xref linkend="functions-subquery">).
In other contexts where two composite-type values are compared, two
@@ -12630,6 +12726,13 @@ postgres=# SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
<entry><productname>Postgres-XC</> version information</entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><literal><function>pgxc_version()</function></literal></entry>
+ <entry><type>text</type></entry>
+ <entry><productname>Postgres-XL Cluster</> version information</entry>
+ </row>
+<!## end>
</tbody>
</tgroup>
</table>
@@ -12646,6 +12749,9 @@ postgres=# SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
<!## XC>
parentheses. (In Postgres-XC, parentheses can optionally be used with
<!## end>
+<!## XL>
+ parentheses. (In Postgres-XL, parentheses can optionally be used with
+<!## end>
<function>current_schema</function>, but not with the others.)
</para>
</note>
@@ -12826,6 +12932,9 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ..
<!## XC>
<productname>Postgres-XC</productname> server's version.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server's version.
+<!## end>
</para>
<indexterm>
@@ -13392,6 +13501,15 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Because value of OID is enforced unique only in each Coordinator
+ or Datanode in <productname>Postgres-XL</>, you should use these
+ functions locally, typically through <type>EXECUTE DIRECT</>
+ statement.
+ </para>
+<!## end>
<indexterm>
<primary>format_type</primary>
@@ -13655,6 +13773,9 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
<!## XC>
<productname>Postgres-XC</>; avoid using pretty-printed output for dump
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>; avoid using pretty-printed output for dump
+<!## end>
purposes. Passing <literal>false</> for the pretty-print parameter yields
the same result as the variant that does not have the parameter at all.
</para>
@@ -13748,7 +13869,16 @@ SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
<para>
Please note that OID is valid locally in each Coordinator and
Datanode. You should use specific OID value in statements
- targetted to specific Coordinator or Datanode by <type>EXECUTE
+ targeted to specific Coordinator or Datanode by <type>EXECUTE
+ DIRECT</> statement.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that OID is valid locally only in each Coordinator and
+ Datanode. You should use specific OID value in statements
+ targeted to specific Coordinator or Datanode by <type>EXECUTE
DIRECT</> statement.
</para>
<!## end>
@@ -13839,8 +13969,16 @@ SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
<!## XC>
&xconly;
<para>
- In <productname>Postgres-XC</>, OID is maitain locally in each Coordinator and Datanode.
- If you specify specific OID value, you should do it in SQL stataements targetted to specif
+ In <productname>Postgres-XC</>, OID is maintained locally in each Coordinator and Datanode.
+ If you specify specific OID value, you should do it in SQL statements targeted to specif
+ Coordinator or Datanode by <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, OID is maintained locally in each Coordinator and Datanode.
+ If you specify specific OID value, you should do it in SQL statements targeted to a specific
Coordinator or Datanode by <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
@@ -13889,7 +14027,14 @@ SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
<row>
<entry><literal><function>pgxc_is_committed(transaction_id)</function></literal></entry>
<entry><type>bool</type></entry>
- <entry>If given xid (gxid) is commited or aborted. NULL indicates the status is unknown (running, not yet started, prepared, frozen, etc).</entry>
+ <entry>If given xid (gxid) is committed or aborted. NULL indicates the status is unknown (running, not yet started, prepared, frozen, etc).</entry>
+ </row>
+<!## end>
+<!## XL>
+ <row>
+ <entry><literal><function>pgxc_is_committed(transaction_id)</function></literal></entry>
+ <entry><type>bool</type></entry>
+ <entry>If given xid (gxid) is committed or aborted. NULL indicates the status is unknown (running, not yet started, prepared, frozen, etc).</entry>
</row>
<!## end>
@@ -14091,6 +14236,15 @@ SELECT set_config('log_statement_stats', 'off', false);
as part of that particular session or transaction.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Similar to the SET command, the set_config() function makes sure
+ that as long as the session/transaction is active, the new parameter
+ value is set across all the nodes on which the SQL queries are being run
+ as part of that particular session or transaction.
+ </para>
+<!## end>
<indexterm>
<primary>pg_cancel_backend</primary>
@@ -14196,6 +14350,14 @@ SELECT set_config('log_statement_stats', 'off', false);
issue these functions through <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that these functions works just locally. To issue
+ these functions to another Coordinators or Datanodes, you should
+ issue these functions through <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
<indexterm>
<primary>backup</primary>
@@ -14401,6 +14563,14 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
issue these functions through <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that these functions works just locally. To issue
+ these functions to another Coordinators or Datanodes, you should
+ issue these functions through <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
<indexterm>
<primary>pg_is_in_recovery</primary>
@@ -14546,6 +14716,14 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
issue these functions through <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that these functions works just locally. To issue
+ these functions to another Coordinators or Datanodes, you should
+ issue these functions through <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
<para>
While recovery is paused no further database changes are applied.
@@ -14773,6 +14951,21 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
otherwise in this document.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The object size functions pg_database_size, pg_indexes_size, pg_relation_size,
+ pg_table_size, and pg_total_relation_size return the cumulative size
+ from all the Datanodes. For e.g., pg_relation_size returns the sum of disk
+ space used up by the specified fork at all the Datanodes where the table is
+ distributed or replicated. If the table is replicated on 3 tables, the size
+ will be 3 times that of individual nodes. If you need to retrieve the local
+ results from a particular Coordinator or Datanode, you should issue these
+ function calls explicitly through <type>EXECUTE DIRECT</> statement. All other
+ system functions run locally at the Coordinator, unless explicitly specified
+ otherwise in this document.
+ </para>
+<!## end>
<para>
The functions shown in <xref linkend="functions-admin-dblocation"> assist
@@ -14844,6 +15037,14 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
issue these functions through <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that these functions works just locally. To issue
+ these functions to another Coordinators or Datanodes, you should
+ issue these functions through <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
&common;
<para>
@@ -15238,6 +15439,17 @@ SELECT (pg_stat_file('filename')).modification;
This applies to both transaction and session level advisory locks.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The advisory lock functions are aware of the Postgres XL cluster. Hence,
+ if you use a function like pg_advisory_lock() from a particular Coordinator,
+ the resource will be locked across the complete cluster, so another
+ application calling the same function from a different Coordinator will see
+ this lock, and will wait on the resource until the lock is released.
+ This applies to both transaction and session level advisory locks.
+ </para>
+<!## end>
<!## XC>
&xconly;
@@ -15296,6 +15508,719 @@ SELECT (pg_stat_file('filename')).modification;
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The functions shown in <xref linkend="functions-pgxc-pooler"> manage
+ Postgres-XL pooler. For details about the Postgres-XL pooler, see
+ <xref linkend="xc-overview-pooler">.
+ </para>
+ <table id="functions-pgxc-pooler">
+ <title>Postgres-XL pooler functions</title>
+ <tgroup cols="3">
+ <thead>
+ <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <literal><function>pgxc_pool_check()</function></literal>
+ </entry>
+ <entry><type>boolean</type></entry>
+ <entry>Check if connection data cached in pooler is consistent with
+ <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal><function>pgxc_pool_reload()</function></literal>
+ </entry>
+ <entry><type>boolean</type></entry>
+ <entry>Reload connection data cached in pooler and reload sessions in server</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <indexterm>
+ <primary>pgxc_pool_check</primary>
+ </indexterm>
+ <para>
+ <function>pgxc_pool_check</> verifies if connection data cached in Postgres-XL pooler
+ is consistent with <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>
+ catalog. Data checked for consistency is Node Oid (<literal><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.oid</literal>),
+ node port (<literal><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.node_port</literal>)
+ and node host (<literal><link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.node_host</literal>).
+ </para>
+ <indexterm>
+ <primary>pgxc_pool_reload</primary>
+ </indexterm>
+ <para>
+ <function>pgxc_pool_reload</> reloads connection data cached in pooler from
+ <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link> catalog
+ and reloads all the information info cached in pooler. All the active transactions
+ are aborted and all existing pooler connections are dropped. This results in having
+ all the temporary and prepared objects dropped on remote and local node for session.
+ </para>
+
+<!## end>
+
+
+
+
+<!## XC>
+&xconly;
+ <para>
+ The functions shown in <xref linkend="functions-pgxc-add-new-node"> manage
+ addition of a new node to Postgres-XC cluster.
+ </para>
+ <table id="functions-pgxc-add-new-node">
+ <title>Postgres-XC functions to manage addition of a new node</title>
+ <tgroup cols="3">
+ <thead>
+ <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <literal><function>pgxc_lock_for_backup()</function></literal>
+ </entry>
+ <entry><type>boolean</type></entry>
+ <entry>Locks the cluster for taking backup that would be restored on the new node to be added.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <indexterm>
+ <primary>pgxc_lock_for_backup</primary>
+ </indexterm>
+ <para>
+ <function>pgxc_lock_for_backup</> locks the cluster for taking backup using <application>pg_dump/pg_dumpall</application>.
+ Locking means that we disallow the statemets that change the portions of the catalog which are
+ backed up by <application>pg_dump/pg_dumpall</application>. When locked only the following utility statemets are allowed.
+ Please note that this function does not impact SELECTs or DMLs.
+ </para>
+
+ <table id="utility-statements-allowed-while-locked">
+ <title>Utility statements allowed while the cluster is locked for backup</title>
+ <tgroup cols="1">
+ <thead>
+ <row><entry>Statement</entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+
+ <row>
+ <entry>
+ <literal><command>EXECUTE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CREATE NODE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>START TRANSACTION</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>BEGIN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COMMIT</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>ROLLBACK</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>PREPARE TRANSACTION</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COMMIT PREPARED</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>ROLLBACK PREPARED</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DECLARE CURSOR</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLOSE CURSOR</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>FETCH</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>TRUNCATE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COPY</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>PREPARE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DEALLOCATE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DO</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>NOTIFY</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LISTEN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>UNLISTEN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LOAD</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLUSTER</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>VACUUM</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>EXPLAIN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SET</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SHOW</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DISCARD</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LOCK</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SET CONSTRAINTS</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CHECKPOINT</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CREATE BARRIER</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>REINDEX</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLEAN CONNECTION</command></literal>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ To lock the cluster for backup while adding a new node <productname>Postgres-XC</productname> uses advisory locks.
+ Every time a disallowed statement is issued the system tries to acquire a transaction
+ level advisory lock in shared mode and the lock is released when
+ the DDL or the transaction issuing the DDL ends. The function <function>pgxc_lock_for_backup</>
+ tries to acquire the same advisory lock in exclusive mode at session level. It is therefore necessary
+ to keep the session issuing <function>pgxc_lock_for_backup</> alive as long as the issuer wants
+ the system to keep the lock.
+ <productname>Postgres-XC</productname> uses the key pair (0xFFFF, 0xFFFF) as object ID while using
+ advisory lock for backup.
+ The function fails to acquire the lock if any one of the following is true:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The caller of the function is not a superuser.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ There are some uncommitted prepared transactions, because they might
+ contain any utility statement belonging to the disallowed group.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The lock is already held by an uncommitted transaction that has issued
+ a utility statement belonging to the disallowed group.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The lock is already held by a previous call to the same function
+ and current request is being issued from a different session.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The functions shown in <xref linkend="functions-pgxc-add-new-node"> manage
+ addition of a new node to Postgres-XL cluster.
+ </para>
+ <table id="functions-pgxc-add-new-node">
+ <title>Postgres-XL functions to manage addition of a new node</title>
+ <tgroup cols="3">
+ <thead>
+ <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <literal><function>pgxc_lock_for_backup()</function></literal>
+ </entry>
+ <entry><type>boolean</type></entry>
+ <entry>Locks the cluster for taking backup that would be restored on the new node to be added.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <indexterm>
+ <primary>pgxc_lock_for_backup</primary>
+ </indexterm>
+ <para>
+ <function>pgxc_lock_for_backup</> locks the cluster for taking backup using <application>pg_dump/pg_dumpall</application>.
+ Locking means that we disallow the statemets that change the portions of the catalog which are
+ backed up by <application>pg_dump/pg_dumpall</application>. When locked only the following utility statemets are allowed.
+ Please note that this function does not impact SELECTs or DMLs.
+ </para>
+
+ <table id="utility-statements-allowed-while-locked">
+ <title>Utility statements allowed while the cluster is locked for backup</title>
+ <tgroup cols="1">
+ <thead>
+ <row><entry>Statement</entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+
+ <row>
+ <entry>
+ <literal><command>EXECUTE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CREATE NODE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>START TRANSACTION</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>BEGIN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COMMIT</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>ROLLBACK</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>PREPARE TRANSACTION</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COMMIT PREPARED</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>ROLLBACK PREPARED</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DECLARE CURSOR</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLOSE CURSOR</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>FETCH</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>TRUNCATE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>COPY</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>PREPARE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DEALLOCATE</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DO</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>NOTIFY</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LISTEN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>UNLISTEN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LOAD</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLUSTER</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>VACUUM</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>EXPLAIN</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SET</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SHOW</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>DISCARD</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>LOCK</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>SET CONSTRAINTS</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CHECKPOINT</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CREATE BARRIER</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>REINDEX</command></literal>
+ </entry>
+ </row>
+
+
+ <row>
+ <entry>
+ <literal><command>CLEAN CONNECTION</command></literal>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ To lock the cluster for backup while adding a new node <productname>Postgres-XL</productname> uses advisory locks.
+ Every time a disallowed statement is issued the system tries to acquire a transaction
+ level advisory lock in shared mode and the lock is released when
+ the DDL or the transaction issuing the DDL ends. The function <function>pgxc_lock_for_backup</>
+ tries to acquire the same advisory lock in exclusive mode at session level. It is therefore necessary
+ to keep the session issuing <function>pgxc_lock_for_backup</> alive as long as the issuer wants
+ the system to keep the lock.
+ <productname>Postgres-XL</productname> uses the key pair (0xFFFF, 0xFFFF) as object ID while using
+ advisory lock for backup.
+ The function fails to acquire the lock if any one of the following is true:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The caller of the function is not a superuser.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ There are some uncommitted prepared transactions, because they might
+ contain any utility statement belonging to the disallowed group.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The lock is already held by an uncommitted transaction that has issued
+ a utility statement belonging to the disallowed group.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The lock is already held by a previous call to the same function
+ and current request is being issued from a different session.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+<!## end>
</sect1>
diff --git a/doc-xc/src/sgml/geqo.sgmlin b/doc-xc/src/sgml/geqo.sgmlin
index 6dbfbee208..97392658ba 100644
--- a/doc-xc/src/sgml/geqo.sgmlin
+++ b/doc-xc/src/sgml/geqo.sgmlin
@@ -48,6 +48,15 @@
planner will be given elsewhere.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ This chapter describes internals about <productname>PostgreSQL</>'s
+ planner. <productname>Postgres-XL</>'s planner inherited and
+ extended it. Detailed description of <productname>Postgres-XL</>'s
+ planner will be given elsewhere.
+ </para>
+<!## end>
<sect1 id="geqo-intro">
<title>Query Handling as a Complex Optimization Problem</title>
diff --git a/doc-xc/src/sgml/gin.sgmlin b/doc-xc/src/sgml/gin.sgmlin
index 86f6981516..d6d853a192 100644
--- a/doc-xc/src/sgml/gin.sgmlin
+++ b/doc-xc/src/sgml/gin.sgmlin
@@ -63,6 +63,9 @@
<!## XC>
implementation in <productname>Postgres-XC</productname> is inherited from <productname>PostgreSQL</> and is primarily
<!## end>
+<!## XL>
+ implementation in <productname>Postgres-XL</productname> is inherited from <productname>PostgreSQL</> and is primarily
+<!## end>
maintained by Teodor Sigaev and Oleg Bartunov. There is more
information about <acronym>GIN</acronym> on their
<ulink url="http://www.sai.msu.su/~megera/wiki/Gin">website</ulink>.
@@ -452,6 +455,9 @@
<!## XC>
<productname>Postgres-XC</productname>, and there are often situations when
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, and there are often situations when
+<!## end>
a full-text search returns a very large set of results. Moreover, this
often happens when the query contains very frequent words, so that the
large result set is not even useful. Since reading many
@@ -509,6 +515,9 @@
<!## XC>
The <productname>Postgres-XC</productname> source distribution includes
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> source distribution includes
+<!## end>
<acronym>GIN</acronym> operator classes for <type>tsvector</> and
for one-dimensional arrays of all internal types. Prefix searching in
<type>tsvector</> is implemented using the <acronym>GIN</> partial match
diff --git a/doc-xc/src/sgml/gist.sgmlin b/doc-xc/src/sgml/gist.sgmlin
index 9ac85269c2..aec788c754 100644
--- a/doc-xc/src/sgml/gist.sgmlin
+++ b/doc-xc/src/sgml/gist.sgmlin
@@ -41,6 +41,9 @@
<!## XC>
implementation in <productname>PostgreSQL</productname> is inherited from <productname>PostgreSQL</> and is primarily
<!## end>
+<!## XL>
+ implementation in <productname>PostgreSQL</productname> is inherited from <productname>PostgreSQL</> and is primarily
+<!## end>
maintained by Teodor Sigaev and Oleg Bartunov, and there is more
information on their
<ulink url="http://www.sai.msu.su/~megera/postgres/gist/">web site</ulink>.
@@ -75,6 +78,11 @@
and hash indexes. That means that you can use
<productname>Postgres-XC</productname> to build a B-tree or hash over any
<!## end>
+<!## XL>
+ example, <productname>Postgres-XL</productname> supports extensible B-trees
+ and hash indexes. That means that you can use
+ <productname>Postgres-XL</productname> to build a B-tree or hash over any
+<!## end>
data type you want. But B-trees only support range predicates
(<literal>&lt;</literal>, <literal>=</literal>, <literal>&gt;</literal>),
and hash indexes only support equality queries.
@@ -88,6 +96,9 @@
<!## XC>
<productname>Postgres-XC</productname> B-tree, you can only issue queries
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> B-tree, you can only issue queries
+<!## end>
such as <quote>is imagex equal to imagey</quote>, <quote>is imagex less
than imagey</quote> and <quote>is imagex greater than imagey</quote>.
Depending on how you define <quote>equals</quote>, <quote>less than</quote>
@@ -131,6 +142,9 @@
<!## XC>
you still have to follow <productname>Postgres-XC</> data type rules here,
<!## end>
+<!## XL>
+ you still have to follow <productname>Postgres-XL</> data type rules here,
+<!## end>
see about <literal>varlena</> for variable sized data). If the tree's
internal data type exists at the SQL level, the <literal>STORAGE</> option
of the <command>CREATE OPERATOR CLASS</> command can be used.
@@ -680,6 +694,9 @@ my_distance(PG_FUNCTION_ARGS)
<!## XC>
The <productname>Postgres-XC</productname> source distribution includes
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> source distribution includes
+<!## end>
several examples of index methods implemented using
<acronym>GiST</acronym>. The core system currently provides text search
support (indexing for <type>tsvector</> and <type>tsquery</>) as well as
diff --git a/doc-xc/src/sgml/high-availability.sgmlin b/doc-xc/src/sgml/high-availability.sgmlin
index 2e08119e59..e67370110a 100644
--- a/doc-xc/src/sgml/high-availability.sgmlin
+++ b/doc-xc/src/sgml/high-availability.sgmlin
@@ -1331,6 +1331,11 @@ if (!triggered)
and the use of this entirely to users.
</para>
<!## end>
+<!## XL>
+&pgonly;
+ <para>
+ </para>
+<!## end>
<para>
It is also possible to implement record-based log shipping using this
@@ -1401,6 +1406,14 @@ if (!triggered)
of <productname>Postgres-XC</productname>.
</para>
<!## end>
+<!## XL>
+&pgonly;
+
+ <para>
+ Hot Standby is not supported by the current version
+ of <productname>Postgres-XL</productname>.
+ </para>
+<!## end>
<!## PG>
<sect2 id="hot-standby-users">
diff --git a/doc-xc/src/sgml/history.sgmlin b/doc-xc/src/sgml/history.sgmlin
index 455e5b9a48..38e366e625 100644
--- a/doc-xc/src/sgml/history.sgmlin
+++ b/doc-xc/src/sgml/history.sgmlin
@@ -7,6 +7,9 @@
<!## XC>
<title>A Brief History of <productname>PostgreSQL</productname> and <productname>Postgres-XC</productname></title>
<!## end>
+<!## XL>
+ <title>A Brief History of <productname>PostgreSQL</productname> and <productname>Postgres-XL</productname></title>
+<!## end>
<indexterm zone="history">
<primary>history</primary>
@@ -229,6 +232,12 @@
then can be found in release notes.
</para>
<!## end>
+<!## XL>
+ <para>
+ Details about what has happened in <productname>PostgreSQL</> since
+ then can be found in release notes.
+ </para>
+<!## end>
</sect2>
<!## XC>
@@ -301,16 +310,29 @@
Group since 2012. More details about this legal entity can be found
<ulink url="https://sourceforge.net/apps/mediawiki/postgres-xc/index.php?title=Charter">here.</ulink>
</para>
+<!## end>
+<!## XL>
+<sect2 id="pgxc-history">
+ <title><productname>Postgres-XL</productname></title>
+
+ <indexterm zone="pgxc-history">
+ <primary>history</primary>
+ <secondary>of Postgres-XL</secondary>
+ </indexterm>
+&xlonly;
-<!## omitted>
<para>
- On the other hand, it is very important to provide high availability
- feature to database clusters. Especially, GTM was pointed out to
- become single point of failure.
- High availability feature was also added
- to <productname>Postgres-XC</productname>.
+ In 2010, NTT's Open Source Software Center approached EnterpriseDB
+ to build off of NTT OSSC's experience with a project called RitaDB
+ and EnterpriseDB's experience with a project called GridSQL,
+ and the result was a new project, Postgres-XC.
+ </para>
+ <para>
+ In 2012, a company called StormDB was formed with some of the original key Postgres-XC developers. StormDB added enhancements, including MPP parallelism for performance and multi-tenant security.
+ </para>
+ <para>
+ In 2013, TransLattice acquired StormDB, and in 2014, open sourced it as Postgres-XL.
</para>
-<!## end>
</sect2>
<!## end>
diff --git a/doc-xc/src/sgml/indices.sgmlin b/doc-xc/src/sgml/indices.sgmlin
index 097739bce2..a1789e0ce2 100644
--- a/doc-xc/src/sgml/indices.sgmlin
+++ b/doc-xc/src/sgml/indices.sgmlin
@@ -24,6 +24,15 @@
not performed in the current implementation.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Each index is maintained locally in Coordinator and Datanode
+ in <productname>Postgres-XL</>.
+ Cross validation of index entries among Coordinators and Datanodes is
+ not performed in the current implementation.
+ </para>
+<!## end>
<sect1 id="indexes-intro">
@@ -108,6 +117,9 @@ CREATE INDEX test1_id_index ON test1 (id);
<!## XC>
<productname>Postgres-XC</productname> allows reads (<command>SELECT</command> statements) to occur
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows reads (<command>SELECT</command> statements) to occur
+<!## end>
on the table in parallel with index creation, but writes (<command>INSERT</command>,
<command>UPDATE</command>, <command>DELETE</command>) are blocked until the index build is finished.
In production environments this is often unacceptable.
@@ -136,6 +148,9 @@ CREATE INDEX test1_id_index ON test1 (id);
<!## XC>
<productname>Postgres-XC</productname> provides several index types:
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides several index types:
+<!## end>
B-tree, Hash, GiST and GIN. Each index type uses a different
algorithm that is best suited to different types of queries.
By default, the <command>CREATE INDEX</command> command creates
@@ -159,6 +174,9 @@ CREATE INDEX test1_id_index ON test1 (id);
<!## XC>
In particular, the <productname>Postgres-XC</productname> query planner
<!## end>
+<!## XL>
+ In particular, the <productname>Postgres-XL</productname> query planner
+<!## end>
will consider using a B-tree index whenever an indexed column is
involved in a comparison using one of these operators:
@@ -247,6 +265,9 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
<!## XC>
<productname>Postgres-XC</productname> includes GiST operator classes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes GiST operator classes
+<!## end>
for several two-dimensional geometric data types, which support indexed
queries using these operators:
@@ -304,6 +325,9 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
<!## XC>
<productname>Postgres-XC</productname> includes GIN operator classes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes GIN operator classes
+<!## end>
for one-dimensional arrays, which support indexed
queries using these operators:
@@ -363,6 +387,9 @@ CREATE INDEX test2_mm_idx ON test2 (major, minor);
<!## XC>
altered when building <productname>Postgres-XC</productname>; see the
<!## end>
+<!## XL>
+ altered when building <productname>Postgres-XL</productname>; see the
+<!## end>
file <filename>pg_config_manual.h</filename>.)
</para>
@@ -440,6 +467,9 @@ CREATE INDEX test2_mm_idx ON test2 (major, minor);
<!## XC>
supported by <productname>Postgres-XC</productname>, only B-tree
<!## end>
+<!## XL>
+ supported by <productname>Postgres-XL</productname>, only B-tree
+<!## end>
can produce sorted output &mdash; the other index types return
matching rows in an unspecified, implementation-dependent order.
</para>
@@ -538,6 +568,9 @@ CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST);
<!## XC>
<productname>Postgres-XC</> has the ability to combine multiple indexes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> has the ability to combine multiple indexes
+<!## end>
(including multiple uses of the same index) to handle cases that cannot
be implemented by single index scans. The system can form <literal>AND</>
and <literal>OR</> conditions across several index scans. For example,
@@ -612,6 +645,14 @@ CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST);
tables, there's no such restriction.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, unique indexes on distributed tables
+ must contain the distribution column. For replicated
+ tables, there's no such restriction.
+ </para>
+<!## end>
&common;
<para>
Indexes can also be used to enforce uniqueness of a column's value,
@@ -636,6 +677,9 @@ CREATE UNIQUE INDEX <replaceable>name</replaceable> ON <replaceable>table</repla
<!## XC>
<productname>Postgres-XC</productname> automatically creates a unique
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> automatically creates a unique
+<!## end>
index when a unique constraint or primary key is defined for a table.
The index covers the columns that make up the primary key or unique
constraint (a multicolumn index, if appropriate), and is the mechanism
@@ -875,6 +919,9 @@ SELECT * FROM orders WHERE order_nr = 3501;
<!## XC>
match. <productname>Postgres-XC</productname> supports partial
<!## end>
+<!## XL>
+ match. <productname>Postgres-XL</productname> supports partial
+<!## end>
indexes with arbitrary predicates, so long as only columns of the
table being indexed are involved. However, keep in mind that the
predicate must match the conditions used in the queries that
@@ -888,6 +935,9 @@ SELECT * FROM orders WHERE order_nr = 3501;
<!## XC>
<productname>Postgres-XC</productname> does not have a sophisticated
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> does not have a sophisticated
+<!## end>
theorem prover that can recognize mathematically equivalent
expressions that are written in different forms. (Not
only is such a general theorem prover extremely difficult to
@@ -949,6 +999,9 @@ CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)
<!## XC>
<productname>Postgres-XC</> makes reasonable choices about index
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> makes reasonable choices about index
+<!## end>
usage (e.g., it avoids them when retrieving common values, so the
earlier example really only saves index size, it is not required to
avoid index usage), and grossly incorrect plan choices are cause
@@ -966,6 +1019,9 @@ CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)
<!## XC>
<productname>Postgres-XC</> work. In most cases, the advantage of a
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> work. In most cases, the advantage of a
+<!## end>
partial index over a regular index will be minimal.
</para>
@@ -1142,6 +1198,9 @@ CREATE INDEX test1c_content_y_index ON test1c (content COLLATE "y");
<!## XC>
Although indexes in <productname>Postgres-XC</> do not need
<!## end>
+<!## XL>
+ Although indexes in <productname>Postgres-XL</> do not need
+<!## end>
maintenance or tuning, it is still important to check
which indexes are actually used by the real-life query workload.
Examining index usage for an individual query is done with the
@@ -1254,6 +1313,9 @@ CREATE INDEX test1c_content_y_index ON test1c (content COLLATE "y");
<!## XC>
<productname>Postgres-XC</> developers to examine the issue.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> developers to examine the issue.
+<!## end>
</para>
</listitem>
</itemizedlist>
diff --git a/doc-xc/src/sgml/info.sgmlin b/doc-xc/src/sgml/info.sgmlin
index 46da07a0cf..c811f8a711 100644
--- a/doc-xc/src/sgml/info.sgmlin
+++ b/doc-xc/src/sgml/info.sgmlin
@@ -3,15 +3,18 @@
<sect1 id="resources">
<title>Further Information</title>
-&xconly;
<para>
Besides the documentation, that is, this book, there are other
<!## PG>
resources about <productname>PostgreSQL</productname>:
<!## end>
<!## XC>
+&xconly;
resources about <productname>Postgres-XC</productname>:
<!## end>
+<!## XL>
+ resources about <productname>Postgres-XL</productname>:
+<!## end>
<variablelist>
@@ -33,6 +36,12 @@
information, links to related pages and <ulink
url="https://sourceforge.net/apps/mediawiki/postgres-xc/index.php?title=Developers"> various development information</>.
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> <ulink
+ url="https://sourceforge.net/apps/mediawiki/postgres-xl/">wiki</ulink> contains the project's
+ information, links to related pages and <ulink
+ url="https://sourceforge.net/apps/mediawiki/postgres-xl/index.php?title=Developers"> various development information</>.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -55,6 +64,13 @@
information to make your work or play with
<productname>Postgres-XC</productname> more productive.
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname>
+ <ulink url="http://postgres-xl.sourceforge.net/">web site</ulink>
+ carries details on the latest release and other
+ information to make your work or play with
+ <productname>Postgres-XL</productname> more productive.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -75,6 +91,12 @@
the developers. Consult the <productname>Postgres-XC</> web site
for details.
<!## end>
+<!## XL>
+ The mailing lists are a good place to have your questions
+ answered, to share experiences with other users, and to contact
+ the developers. Consult the <productname>Postgres-XL</> web site
+ for details.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -105,6 +127,17 @@
up and contribute it. If you add features to the code,
contribute them.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is an open-source project.
+ As such, it depends on the user community for ongoing support.
+ As you begin to use <productname>Postgres-XL</productname>, you
+ will rely on others for help, either through the documentation
+ or through the mailing lists. Consider contributing your
+ knowledge back. Read the mailing lists and answer questions. If
+ you learn something which is not in the documentation, write it
+ up and contribute it. If you add features to the code,
+ contribute them.
+<!## end>
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/information_schema.sgmlin b/doc-xc/src/sgml/information_schema.sgmlin
index e720b29166..2e76ef05cf 100644
--- a/doc-xc/src/sgml/information_schema.sgmlin
+++ b/doc-xc/src/sgml/information_schema.sgmlin
@@ -20,6 +20,9 @@
<!## XC>
<productname>Postgres-XC</productname> and are modelled after
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> and are modelled after
+<!## end>
implementation concerns. The information schema views do not,
however, contain information about
<!## PG>
@@ -28,6 +31,9 @@
<!## XC>
<productname>Postgres-XC</productname>-specific features; to inquire
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>-specific features; to inquire
+<!## end>
about those you need to query the system catalogs or other
<productname>PostgreSQL</productname>-specific views.
</para>
@@ -44,6 +50,9 @@
<!## XC>
<productname>Postgres-XC</productname> does not enforce this
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> does not enforce this
+<!## end>
restriction. <productname>PostgreSQL</productname>
automatically-generated constraint names avoid duplicates in the
same schema, but users can specify such duplicate names.
@@ -306,6 +315,9 @@
<!## XC>
which are sometimes called attributes in Postgres-XC contexts.)
<!## end>
+<!## XL>
+ which are sometimes called attributes in Postgres-XL contexts.)
+<!## end>
</para>
<table>
@@ -501,6 +513,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -512,6 +527,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -523,6 +541,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -534,6 +555,9 @@
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -558,6 +582,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
</tgroup>
@@ -580,6 +607,9 @@
<!## XC>
sets available in the current database. Since Postgres-XC does not
<!## end>
+<!## XL>
+ sets available in the current database. Since Postgres-XL does not
+<!## end>
support multiple character sets within one database, this view only
shows one, which is the database encoding.
</para>
@@ -615,6 +645,9 @@
<!## XC>
all supported by Postgres-XC). Encoding forms are not exposed
<!## end>
+<!## XL>
+ all supported by Postgres-XL). Encoding forms are not exposed
+<!## end>
as an SQL object, but are visible in this view.
</para>
</listitem>
@@ -642,6 +675,9 @@
<!## XC>
You can think of an <quote>encoding</quote> in Postgres-XC either as
<!## end>
+<!## XL>
+ You can think of an <quote>encoding</quote> in Postgres-XL either as
+<!## end>
a character set or a character encoding form. They will have the
same name, and there can only be one in one database.
</para>
@@ -885,6 +921,9 @@
<!## XC>
SPACE</literal> is not supported by Postgres-XC.)
<!## end>
+<!## XL>
+ SPACE</literal> is not supported by Postgres-XL.)
+<!## end>
</entry>
</row>
</tbody>
@@ -904,6 +943,9 @@
<!## XC>
applicable to. In Postgres-XC, there is only one character set per
<!## end>
+<!## XL>
+ applicable to. In Postgres-XL, there is only one character set per
+<!## end>
database (see explanation
in <xref linkend="infoschema-character-sets">), so this view does
not provide much useful information.
@@ -1129,6 +1171,9 @@
<!## XC>
<productname>Postgres-XC</productname>, built-in data types behave
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, built-in data types behave
+<!## end>
like user-defined types, so they are included here as well. See
also <xref linkend="infoschema-columns"> for details.
</para>
@@ -1386,6 +1431,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1397,6 +1445,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1408,6 +1459,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1419,6 +1473,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1430,6 +1487,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1441,6 +1501,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1505,6 +1568,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1516,6 +1582,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1527,6 +1596,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1538,6 +1610,9 @@
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1562,6 +1637,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1573,6 +1651,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1584,6 +1665,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1595,6 +1679,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1606,6 +1693,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1617,6 +1707,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1628,6 +1721,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1639,6 +1735,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1650,6 +1749,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1661,6 +1763,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -1684,6 +1789,9 @@
<!## XC>
<productname>Postgres-XC</productname> contains additional ways to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> contains additional ways to
+<!## end>
define data types, their representation in the information schema
can be somewhat difficult. The column <literal>data_type</literal>
is supposed to identify the underlying built-in type of the column.
@@ -1693,6 +1801,9 @@
<!## XC>
In <productname>Postgres-XC</productname>, this means that the type
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname>, this means that the type
+<!## end>
is defined in the system catalog schema
<literal>pg_catalog</literal>. This column might be useful if the
application can handle the well-known built-in types specially (for
@@ -1707,6 +1818,9 @@
<!## XC>
<productname>Postgres-XC</productname> treats built-in types like
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> treats built-in types like
+<!## end>
user-defined types, built-in types appear here as well. This is an
extension of the SQL standard.) These columns should be used if an
application wants to process data differently according to the
@@ -2042,6 +2156,9 @@
<!## XC>
Note that in <productname>Postgres-XC</productname>, built-in data
<!## end>
+<!## XL>
+ Note that in <productname>Postgres-XL</productname>, built-in data
+<!## end>
types behave like user-defined types, so they are included here as
well.
</para>
@@ -2181,6 +2298,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2192,6 +2312,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2203,6 +2326,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2214,6 +2340,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2225,6 +2354,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2236,6 +2368,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2336,6 +2471,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2347,6 +2485,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2358,6 +2499,9 @@
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2369,6 +2513,9 @@
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2494,6 +2641,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2505,6 +2655,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2516,6 +2669,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2527,6 +2683,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2538,6 +2697,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2549,6 +2711,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2560,6 +2725,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2571,6 +2739,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2582,6 +2753,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2593,6 +2767,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2604,6 +2781,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2615,6 +2795,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2626,6 +2809,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2637,6 +2823,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to array element data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2680,6 +2869,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2691,6 +2883,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2702,6 +2897,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -2713,6 +2911,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
@@ -3295,6 +3496,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3306,6 +3510,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3336,6 +3543,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3347,6 +3557,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3358,6 +3571,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3369,6 +3585,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3380,6 +3599,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3391,6 +3613,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3402,6 +3627,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3413,6 +3641,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3424,6 +3655,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3435,6 +3669,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3446,6 +3683,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3457,6 +3697,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3468,6 +3711,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3479,6 +3725,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to parameter data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3516,6 +3765,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3527,6 +3779,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3538,6 +3793,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3549,6 +3807,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -3937,6 +4198,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
</tgroup>
@@ -4199,6 +4463,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4210,6 +4477,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4221,6 +4491,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4232,6 +4505,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4243,6 +4519,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4254,6 +4533,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4278,6 +4560,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4289,6 +4574,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4300,6 +4588,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4311,6 +4602,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4322,6 +4616,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4333,6 +4630,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4344,6 +4644,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4355,6 +4658,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4366,6 +4672,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4377,6 +4686,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4388,6 +4700,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4399,6 +4714,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4410,6 +4728,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4421,6 +4742,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, since this information is not applied to return data types in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, since this information is not applied to return data types in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4458,6 +4782,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4469,6 +4796,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4480,6 +4810,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4491,6 +4824,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Always null, because arrays always have unlimited maximum cardinality in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4529,6 +4865,9 @@ ORDER BY c.ordinal_position;
<!## XC>
in <productname>Postgres-XC</productname> it will contain
<!## end>
+<!## XL>
+ in <productname>Postgres-XL</productname> it will contain
+<!## end>
whatever source text was specified when the function was
created.)
</entry>
@@ -4562,6 +4901,9 @@ ORDER BY c.ordinal_position;
<!## XC>
other parameter styles, which are not available in <productname>Postgres-XC</>.)
<!## end>
+<!## XL>
+ other parameter styles, which are not available in <productname>Postgres-XL</>.)
+<!## end>
</entry>
</row>
@@ -4578,6 +4920,9 @@ ORDER BY c.ordinal_position;
<!## XC>
levels available in <productname>Postgres-XC</> through the information schema.)
<!## end>
+<!## XL>
+ levels available in <productname>Postgres-XL</> through the information schema.)
+<!## end>
</entry>
</row>
@@ -4593,6 +4938,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</entry>
</row>
@@ -4615,6 +4963,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4629,6 +4980,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</>.)
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.)
+<!## end>
</entry>
</row>
@@ -4641,6 +4995,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4652,6 +5009,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4663,6 +5023,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4685,6 +5048,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4696,6 +5062,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4707,6 +5076,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4718,6 +5090,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4729,6 +5104,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4740,6 +5118,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4751,6 +5132,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4762,6 +5146,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4773,6 +5160,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4784,6 +5174,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4795,6 +5188,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4806,6 +5202,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4817,6 +5216,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4828,6 +5230,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4839,6 +5244,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4850,6 +5258,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4861,6 +5272,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4872,6 +5286,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4883,6 +5300,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4894,6 +5314,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4905,6 +5328,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4916,6 +5342,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4927,6 +5356,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4938,6 +5370,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4949,6 +5384,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4960,6 +5398,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4971,6 +5412,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4982,6 +5426,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -4993,6 +5440,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5004,6 +5454,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5015,6 +5468,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5026,6 +5482,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
</tgroup>
@@ -5081,6 +5540,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5092,6 +5554,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5103,6 +5568,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -5114,6 +5582,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
</tgroup>
@@ -5173,6 +5644,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</productname>, this is currently always
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, this is currently always
+<!## end>
<literal>bigint</literal>.
</entry>
</row>
@@ -5265,6 +5739,9 @@ ORDER BY c.ordinal_position;
<!## XC>
supported by <productname>Postgres-XC</productname>. This is the
<!## end>
+<!## XL>
+ supported by <productname>Postgres-XL</productname>. This is the
+<!## end>
same information that is presented in <xref linkend="features">.
There you can also find some additional background information.
</para>
@@ -5317,6 +5794,9 @@ ORDER BY c.ordinal_position;
<!## XC>
current version of <productname>Postgres-XC</>, <literal>NO</literal> if not
<!## end>
+<!## XL>
+ current version of <productname>Postgres-XL</>, <literal>NO</literal> if not
+<!## end>
</entry>
</row>
@@ -5330,6 +5810,9 @@ ORDER BY c.ordinal_position;
<!## XC>
Always null, since the <productname>Postgres-XC</> development group does not
<!## end>
+<!## XL>
+ Always null, since the <productname>Postgres-XL</> development group does not
+<!## end>
perform formal testing of feature conformance
</entry>
</row>
@@ -5427,12 +5910,18 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
<!## PG>
<productname>PostgreSQL</productname> supports direct SQL and
<!## end>
<!## XC>
<productname>Postgres-XC</productname> supports direct SQL and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports direct SQL and
+<!## end>
embedded SQL in C; that is all you will learn from this table.
</para>
@@ -5509,6 +5998,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<literal>EMBEDDED</literal>, else null. <productname>Postgres-XC</> only
<!## end>
+<!## XL>
+ <literal>EMBEDDED</literal>, else null. <productname>Postgres-XL</> only
+<!## end>
supports the language C.
</entry>
</row>
@@ -5530,6 +6022,9 @@ ORDER BY c.ordinal_position;
<!## XC>
supported by <productname>Postgres-XC</productname>. Refer to <xref
<!## end>
+<!## XL>
+ supported by <productname>Postgres-XL</productname>. Refer to <xref
+<!## end>
linkend="features"> for background information on feature packages.
</para>
@@ -5569,6 +6064,9 @@ ORDER BY c.ordinal_position;
<!## XC>
current version of <productname>Postgres-XC</>, <literal>NO</literal> if not
<!## end>
+<!## XL>
+ current version of <productname>Postgres-XL</>, <literal>NO</literal> if not
+<!## end>
</entry>
</row>
@@ -5582,6 +6080,9 @@ ORDER BY c.ordinal_position;
<!## XC>
Always null, since the <productname>Postgres-XC</> development group does not
<!## end>
+<!## XL>
+ Always null, since the <productname>Postgres-XL</> development group does not
+<!## end>
perform formal testing of feature conformance
</entry>
</row>
@@ -5609,6 +6110,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
<table>
@@ -5647,6 +6151,9 @@ ORDER BY c.ordinal_position;
<!## XC>
current version of <productname>Postgres-XC</>,
<!## end>
+<!## XL>
+ current version of <productname>Postgres-XL</>,
+<!## end>
<literal>NO</literal> if not
</entry>
</row>
@@ -5661,6 +6168,9 @@ ORDER BY c.ordinal_position;
<!## XC>
Always null, since the <productname>Postgres-XC</> development group does not
<!## end>
+<!## XL>
+ Always null, since the <productname>Postgres-XL</> development group does not
+<!## end>
perform formal testing of feature conformance
</entry>
</row>
@@ -5688,6 +6198,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<productname>Postgres-XC</productname>. This information is
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. This information is
+<!## end>
primarily intended for use in the context of the ODBC interface;
users of other interfaces will probably find this information to be
of little use. For this reason, the individual sizing items are
@@ -5753,6 +6266,9 @@ ORDER BY c.ordinal_position;
<!## XC>
required by various profiles of the SQL standard. <productname>Postgres-XC</> does
<!## end>
+<!## XL>
+ required by various profiles of the SQL standard. <productname>Postgres-XL</> does
+<!## end>
not track any SQL profiles, so this table is empty.
</para>
@@ -5973,6 +6489,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
</tbody>
</tgroup>
@@ -6042,6 +6561,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -6053,6 +6575,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
@@ -6112,6 +6637,9 @@ ORDER BY c.ordinal_position;
<!## XC>
not supported by <productname>Postgres-XC</>.)
<!## end>
+<!## XL>
+ not supported by <productname>Postgres-XL</>.)
+<!## end>
</entry>
</row>
</tbody>
@@ -6407,6 +6935,9 @@ ORDER BY c.ordinal_position;
<!## XC>
In <productname>Postgres-XC</productname>, this currently applies to
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname>, this currently applies to
+<!## end>
collations, domains, foreign-data wrappers, and foreign servers. There is one
row for each combination of object, grantor, and grantee.
</para>
@@ -6419,6 +6950,9 @@ ORDER BY c.ordinal_position;
<!## XC>
in <productname>Postgres-XC</productname>, this view shows implicit
<!## end>
+<!## XL>
+ in <productname>Postgres-XL</productname>, this view shows implicit
+<!## end>
non-grantable <literal>USAGE</literal> privileges granted by the
owner to <literal>PUBLIC</literal> for all collations and domains. The other
object types, however, show real privileges.
@@ -6898,6 +7432,9 @@ ORDER BY c.ordinal_position;
<!## XC>
<entry>Applies to a feature not available in <productname>Postgres-XC</></entry>
<!## end>
+<!## XL>
+ <entry>Applies to a feature not available in <productname>Postgres-XL</></entry>
+<!## end>
</row>
<row>
diff --git a/doc-xc/src/sgml/installation.sgmlin b/doc-xc/src/sgml/installation.sgmlin
index fe5a81e43d..986bdff479 100644
--- a/doc-xc/src/sgml/installation.sgmlin
+++ b/doc-xc/src/sgml/installation.sgmlin
@@ -13,6 +13,9 @@ to the main documentation. Don't use <xref>.
<!## XC>
<title><![%standalone-include[<productname>Postgres-XC</>]]>
<!## end>
+<!## XL>
+ <title><![%standalone-include[<productname>Postgres-XL</>]]>
+<!## end>
Installation from Source Code</title>
<indexterm zone="installation">
@@ -44,6 +47,19 @@ to the main documentation. Don't use <xref>.
and read the packager's instructions instead.)
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ This <![%standalone-include;[document]]>
+ <![%standalone-ignore;[chapter]]> describes the installation of
+ <productname>Postgres-XL</productname> using the source code
+ distribution. (If you are installing a pre-packaged distribution,
+ such as an RPM or Debian package, ignore this
+ <![%standalone-include;[document]]>
+ <![%standalone-ignore;[chapter]]>
+ and read the packager's instructions instead.)
+ </para>
+<!## end>
<sect1 id="install-short">
<title>Short Version</title>
@@ -103,6 +119,44 @@ su - postgres
/usr/local/pgsql/bin/psql test
</synopsis>
<!## end>
+<!## XL>
+ <para>
+ The following short installation allows to install a simple cluster on a local machine with
+ 1 Coordinator, 2 Datanodes and 1 GTM. When installing a more complex cluster, you might
+ change the number of Coordinators and Datanodes, and might have to start nodes on different
+ servers.
+ Also, you can instead use the pgxc_ctl utility, which simplifies the installation and configuration process.
+ </para>
+<synopsis>
+./configure
+gmake
+su
+gmake install
+adduser postgres
+mkdir /usr/local/pgsql/data_coord1
+mkdir /usr/local/pgsql/data_datanode1
+mkdir /usr/local/pgsql/data_datanode2
+mkdir /usr/local/pgsql/data_gtm
+chown postgres /usr/local/pgsql/data_coord1
+chown postgres /usr/local/pgsql/data_datanode1
+chown postgres /usr/local/pgsql/data_datanode2
+chown postgres /usr/local/pgsql/data_gtm
+su - postgres
+/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_coord1 --nodename coord1
+/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_datanode1 --nodename datanode1
+/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_datanode2 --nodename datanode2
+/usr/local/pgsql/bin/initgtm -D /usr/local/pgsql/data_gtm -Z gtm
+/usr/local/pgsql/bin/gtm -D /usr/local/pgsql/data_gtm &gt;logfile 2&gt;&amp;1 &amp;
+/usr/local/pgsql/bin/postgres --datanode -p 15432 -D /usr/local/pgsql/data_datanode1 &gt;logfile 2&gt;&amp;1 &amp;
+/usr/local/pgsql/bin/postgres --datanode -p 15433 -D /usr/local/pgsql/data_datanode2 &gt;logfile 2&gt;&amp;1 &amp;
+/usr/local/pgsql/bin/postgres --coordinator -D /usr/local/pgsql/data_coord1 &gt;logfile 2&gt;&amp;1 &amp;
+/usr/local/pgsql/bin/psql -c "CREATE NODE datanode1 WITH (TYPE = 'datanode', PORT = 15432)" postgres
+/usr/local/pgsql/bin/psql -c "CREATE NODE datanode2 WITH (TYPE = 'datanode', PORT = 15433)" postgres
+/usr/local/pgsql/bin/psql -c "SELECT pgxc_pool_reload()" postgres
+/usr/local/pgsql/bin/createdb test
+/usr/local/pgsql/bin/psql test
+</synopsis>
+<!## end>
<para>
The long version is the rest of this
@@ -132,6 +186,12 @@ su - postgres
In general, a Linux-Unix platform should be able to run <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In general, a Linux-Unix platform should be able to run <productname>Postgres-XL</>.
+ </para>
+<!## end>
<para>
The following software packages are required for building
@@ -141,6 +201,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</>:
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>:
+<!## end>
<itemizedlist>
<listitem>
@@ -174,6 +237,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</> is known to build using a wide variety
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> is known to build using a wide variety
+<!## end>
of compilers from different vendors.
</para>
</listitem>
@@ -235,6 +301,26 @@ su - postgres
<literal>readline</> and <literal>readline-devel</> packages, if
those are separate in your distribution.
<!## end>
+<!## XL>
+ The <acronym>GNU</> <productname>Readline</> library is used by
+ default. It allows <application>psql</application> (the
+ Postgres-XL command line SQL interpreter) to remember each
+ command you type, and allows you to use arrow keys to recall and
+ edit previous commands. This is very helpful and is strongly
+ recommended. If you don't want to use it then you must specify
+ the <option>--without-readline</option> option to
+ <filename>configure</>. As an alternative, you can often use the
+ BSD-licensed <filename>libedit</filename> library, originally
+ developed on <productname>NetBSD</productname>. The
+ <filename>libedit</filename> library is
+ GNU <productname>Readline</productname>-compatible and is used if
+ <filename>libreadline</filename> is not found, or if
+ <option>--with-libedit-preferred</option> is used as an
+ option to <filename>configure</>. If you are using a package-based
+ Linux distribution, be aware that you need both the
+ <literal>readline</> and <literal>readline-devel</> packages, if
+ those are separate in your distribution.
+<!## end>
</para>
</listitem>
@@ -292,6 +378,11 @@ su - postgres
like this will appear during the <productname>Postgres-XC</>
build to point out this fact:
<!## end>
+<!## XL>
+ If you don't have the shared library but you need one, a message
+ like this will appear during the <productname>Postgres-XL</>
+ build to point out this fact:
+<!## end>
<screen>
*** Cannot build PL/Perl because libperl is not a shared library.
@@ -360,6 +451,14 @@ su - postgres
system of this. Consult the <filename>Makefile</filename> in
the <filename>src/pl/plpython</filename> directory for details.
<!## end>
+<!## XL>
+ If you have problems, run <productname>Python</> 2.3 or later's
+ configure using the <literal>--enable-shared</> flag. On some
+ operating systems you don't have to build a shared library, but
+ you will have to convince the <productname>Postgres-XL</> build
+ system of this. Consult the <filename>Makefile</filename> in
+ the <filename>src/pl/plpython</filename> directory for details.
+<!## end>
</para>
</listitem>
@@ -509,6 +608,24 @@ su - postgres
of the installation procedure.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <productname>Postgres-XL</> &version; sources can be obtained from
+ its <ulink url="http://postgres-xl.sourceforge.net/">Web site</ulink> or
+ <ulink url="http://sourceforge.net/projects/postgres-xl/">development site</ulink>.
+ After you have obtained the file, unpack it:
+<screen>
+<userinput>gunzip pgxl-v&version;.tar.gz</userinput>
+<userinput>tar xf pgxl-v&version;.tar</userinput>
+</screen>
+ This will create a directory
+ <filename>pgxl</filename> under the current directory
+ with the <productname>Postgres-XL</> sources.
+ Change into that directory for the rest
+ of the installation procedure.
+ </para>
+<!## end>
<para>
You can also get the source directly from the version control repository, see
@@ -520,7 +637,6 @@ su - postgres
<sect1 id="install-procedure">
<title>Installation Procedure</title>
-&xconly;
<procedure>
<step id="configure">
@@ -700,6 +816,9 @@ su - postgres
<!## XC>
The man pages that come with <productname>Postgres-XC</> will be installed under
<!## end>
+<!## XL>
+ The man pages that come with <productname>Postgres-XL</> will be installed under
+<!## end>
this directory, in their respective
<filename>man<replaceable>x</></> subdirectories.
The default is <filename><replaceable>DATAROOTDIR</>/man</>.
@@ -730,6 +849,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</productname> will be installed under
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will be installed under
+<!## end>
this directory. The default is
<filename><replaceable>DATAROOTDIR</></>.
</para>
@@ -746,6 +868,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</> into shared installation locations
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> into shared installation locations
+<!## end>
(such as <filename>/usr/local/include</filename>) without
interfering with the namespace of the rest of the system. First,
the string <quote><literal>/postgresql</literal></quote> is
@@ -845,6 +970,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</> servers on the same machine.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> servers on the same machine.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -1051,6 +1179,9 @@ su - postgres
<!## XC>
options. Postgres-XC will use it automatically if found. To
<!## end>
+<!## XL>
+ options. Postgres-XL will use it automatically if found. To
+<!## end>
specify a libxml installation at an unusual location, you can
either set the environment variable
<envar>XML2_CONFIG</envar> to point to the
@@ -1088,6 +1219,9 @@ su - postgres
<!## XC>
default in <productname>Postgres-XC</productname> releases
<!## end>
+<!## XL>
+ default in <productname>Postgres-XL</productname> releases
+<!## end>
prior to 8.4, but it is now deprecated, because it does not
support microsecond precision for the full range of
<type>timestamp</type> values. However, integer-based
@@ -1100,6 +1234,9 @@ su - postgres
<!## XC>
versions of <productname>Postgres-XC</productname>. See
<!## end>
+<!## XL>
+ versions of <productname>Postgres-XL</productname>. See
+<!## end>
<![%standalone-include[the documentation about datetime datatypes]]>
<![%standalone-ignore[<xref linkend="datatype-datetime">]]>
for more information.
@@ -1216,6 +1353,9 @@ su - postgres
<!## XC>
Allow the build to succeed even if <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Allow the build to succeed even if <productname>Postgres-XL</>
+<!## end>
has no CPU spinlock support for the platform. The lack of
spinlock support will result in poor performance; therefore,
this option should only be used if the build aborts and
@@ -1226,6 +1366,9 @@ su - postgres
<!## XC>
option is required to build <productname>Postgres-XC</> on
<!## end>
+<!## XL>
+ option is required to build <productname>Postgres-XL</> on
+<!## end>
your platform, please report the problem to the
<!## PG>
<productname>PostgreSQL</> developers.
@@ -1233,6 +1376,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</> developers.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> developers.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -1262,6 +1408,9 @@ su - postgres
<!## XC>
<productname>Postgres-XC</> includes its own time zone database,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> includes its own time zone database,
+<!## end>
which it requires for date and time operations. This time zone
database is in fact compatible with the <quote>zoneinfo</> time zone
database provided by many operating systems such as FreeBSD,
@@ -1281,6 +1430,9 @@ su - postgres
<!## XC>
pointed to works correctly with <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ pointed to works correctly with <productname>Postgres-XL</>.
+<!## end>
</para>
<indexterm><primary>cross compilation</primary></indexterm>
@@ -1294,6 +1446,9 @@ su - postgres
<!## XC>
advantage of using this option is that the Postgres-XC package
<!## end>
+<!## XL>
+ advantage of using this option is that the Postgres-XL package
+<!## end>
won't need to be upgraded whenever any of the many local
daylight-saving time rules change. Another advantage is that
<!## PG>
@@ -1302,6 +1457,9 @@ su - postgres
<!## XC>
Postgres-XC can be cross-compiled more straightforwardly if the
<!## end>
+<!## XL>
+ Postgres-XL can be cross-compiled more straightforwardly if the
+<!## end>
time zone database files do not need to be built during the
installation.
</para>
@@ -1364,6 +1522,15 @@ su - postgres
This option is for use only with GCC
and when doing development work.
<!## end>
+<!## XL>
+ <!-- regress-coverage is not included in XL reference -->
+ If using GCC, all programs and libraries are compiled with
+ code coverage testing instrumentation. When run, they
+ generate files in the build directory with code coverage
+ metrics.
+ This option is for use only with GCC
+ and when doing development work.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -1426,6 +1593,9 @@ su - postgres
<!## XC>
Compiles <productname>Postgres-XC</productname> with support for the
<!## end>
+<!## XL>
+ Compiles <productname>Postgres-XL</productname> with support for the
+<!## end>
dynamic tracing tool DTrace.
<![%standalone-ignore[See <xref linkend="dynamic-trace">
for more information.]]>
@@ -1485,6 +1655,13 @@ su - postgres
Please note that you need to specify <filename>-DPGXC</>
explicitly to specify <filename>CFLAGS</> option.
<!## end>
+<!## XL>
+<screen>
+<userinput>./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe -DPGXL'</>
+</screen>
+ Please note that you need to specify <filename>-DPGXL</>
+ explicitly to specify <filename>CFLAGS</> option.
+<!## end>
</para>
<para>
@@ -1669,6 +1846,9 @@ All of PostgreSQL is successfully made. Ready to install.
<!## XC>
All of Postgres-XC is successfully made. Ready to install.
<!## end>
+<!## XL>
+All of Postgres-XL is successfully made. Ready to install.
+<!## end>
</screen>
</para>
@@ -1690,6 +1870,11 @@ PostgreSQL, contrib and HTML documentation successfully made. Ready to install.
Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
</screen>
<!## end>
+<!## XL>
+<screen>
+Postgres-XL, contrib and HTML documentation successfully made. Ready to install.
+</screen>
+<!## end>
</para>
</step>
@@ -1811,6 +1996,83 @@ Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
</variablelist>
</para>
<!## end>
+<!## XL>
+ <para>
+ Before learning how to install <productname>Postgres-XL</>, you should determine
+ what you are going to install on each server. The following lists
+ <productname>Postgres-XL</> components you've built and you're going to install.
+
+ <variablelist>
+ <varlistentry>
+ <term><envar>GTM</envar></term>
+ <listitem>
+ <para>
+ GTM stands for Global Transaction Manager. It provides global transaction ID
+ and snapshot to each transaction in <productname>Postgres-XL</> database cluster.
+ It also provide several global value such as sequence and global timestamp.
+ </para>
+ <para>
+ GTM itself can be configured as a backup of other GTM as
+ GTM-Standby so that GTM can continue to run even if main GTM
+ fails. You may want to install GTM-Standby to separate
+ server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>GTM-Proxy</envar></term>
+ <listitem>
+ <para>
+ Because GTM has to take care of each transaction, it has to
+ read and write enormous amount of messages which may
+ restrict <productname>Postgres-XL</> scalability. GTM-Proxy is
+ a proxy of GTM feature which groups requests and response to
+ reduce network read/write by GTM. Distributing one snapshot to
+ multiple transactions also contributes to reduce GTM network
+ workload.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>Coordinator</envar></term>
+ <listitem>
+ <para>
+ The Coordinator is an entry point to <productname>Postgres-XL</> from applications.
+ You can run more than one Coordinator simultaneously in the cluster. Each Coordinator behaves
+ just as a <productname>PostgreSQL</> database server, while all the Coordinators
+ handles transactions in harmonized way so that any transaction coming into one
+ Coordinator is protected against any other transactions coming into others.
+ Updates by a transaction is visible immediately to others running in other
+ Coordinators.
+ To simplify the load balance of Coordinators and Datanodes, as mentioned
+ below, it is highly advised to install same number of Coordinator and Datanode
+ in a server.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><envar>Datanode</envar></term>
+ <listitem>
+ <para>
+ Datanode
+ </para>
+ <para>
+ The Coordinator and Datanode shares the same binary but their behavior is a little
+ different. The Coordinator decomposes incoming statements into those handled by
+ Datanodes. If necessary, the Coordinator materializes response from Datanodes
+ to calculate final response to applications.
+ </para>
+ <para>
+ The Datanode is very close to PostgreSQL itself because it just handles incoming
+ statements locally.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+<!## end>
<para>
<!## PG>
@@ -1819,6 +2081,9 @@ Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
<!## XC>
To install <productname>Postgres-XC</> enter:
<!## end>
+<!## XL>
+ To install <productname>Postgres-XL</> enter:
+<!## end>
<screen>
<userinput>gmake install</userinput>
</screen>
@@ -1837,6 +2102,9 @@ Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
<!## XC>
To install the documentation (HTML and man pages), enter:
<!## end>
+<!## XL>
+ To install the documentation (HTML and man pages), enter:
+<!## end>
<screen>
<userinput>gmake install-docs</userinput>
</screen>
@@ -1942,14 +2210,12 @@ Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
<sect1 id="install-post">
<title>Post-Installation Setup</title>
-&xconly;
<sect2>
<title>Shared Libraries</title>
<indexterm>
<primary>shared library</primary>
</indexterm>
-&xconly;
<para>
<!## PG>
On some systems with shared libraries
@@ -1970,6 +2236,12 @@ Postgres-XC, contrib and HTML documentation successfully made. Ready to install.
shared libraries.
However, <systemitem class="osname">Linux</> does <emphasis>not</> need this.
<!## end>
+<!## XL>
+ On some systems with shared libraries
+ you need to tell the system how to find the newly installed
+ shared libraries.
+ However, <systemitem class="osname">Linux</> does <emphasis>not</> need this.
+<!## end>
</para>
<para>
@@ -2032,6 +2304,11 @@ libpq.so.2.1: cannot open shared object file: No such file or directory
class="osname">Linux</>,
you have root access and you can run:
<!## end>
+<!## XL>
+ Because you are <systemitem
+ class="osname">Linux</>,
+ you have root access and you can run:
+<!## end>
<programlisting>
/sbin/ldconfig /usr/local/pgsql/lib
</programlisting>
@@ -2070,6 +2347,9 @@ libpq.so.2.1: cannot open shared object file: No such file or directory
<!## XC>
necessary, but it will make the use of <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ necessary, but it will make the use of <productname>Postgres-XL</>
+<!## end>
much more convenient.
</para>
@@ -2121,6 +2401,17 @@ export MANPATH
and <productname>Postgres-XC</> will not run correctly.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ When, as typical case, you're configuring both Coordinator and
+ Datanode in a same server, please be careful not to assign same
+ resource, such as listening point (IP address and port number) to
+ different component. If you apply single set of environment
+ described here to different components, they will conflict
+ and <productname>Postgres-XL</> will not run correctly.
+ </para>
+<!## end>
</sect2>
</sect1>
@@ -2136,6 +2427,9 @@ export MANPATH
<!## XC>
The following is a quick summary of how to get <productname>Postgres-XC</> up and
<!## end>
+<!## XL>
+ The following is a quick summary of how to get <productname>Postgres-XL</> up and
+<!## end>
running once installed. The main documentation contains more information.
</para>
@@ -2160,6 +2454,15 @@ export MANPATH
around, your own user account is enough, but running the server
as root is a security risk and will not work.
<!## end>
+<!## XL>
+ Create a user account on all the servers where at least one
+ of <productname>Postgres-XL</> component runs. This is the user
+ the components will run as. For production use you should create a
+ separate, unprivileged account (<quote>postgres</> is commonly
+ used). If you do not have root access or just want to play
+ around, your own user account is enough, but running the server
+ as root is a security risk and will not work.
+<!## end>
<screen>
<userinput>adduser postgres</>
</screen>
@@ -2225,6 +2528,65 @@ bin/ include/ lib/ share/
</step>
<!## end>
+<!## XL>
+
+ <step>
+&xlonly;
+ <para>
+ If you follow the previous steps, you will have files ready to
+ distribute to servers where you want to run one or
+ more <productname>Postgres-XL</> components.
+ </para>
+ <para>
+ After you've installed your build locally, build target
+ will include the following directories.
+
+<screen>
+bin/ include/ lib/ share/
+</screen>
+
+ <filename>bin</> directory contains executable binaries and
+ scripts. <filename>include</> contains header files needed to
+ build <productname>Postgres-XL</> applications. <filename>lib</>
+ contains shared libraries needed to run binaries, as well as
+ static libraries which should be included into your application
+ binaries. Finally, <productname>share</> contains miscellaneous
+ files <productname>Postgres-XL</> should read at runtime, as well
+ as sample files.
+
+ </para>
+
+ <para>
+
+ If your servers has sufficient file space, you can copy all the
+ files to the target server. Total size is less than 30mega
+ bytes. If you want to install minimum files to each servers,
+ please follow the following paragraphs.
+
+ </para>
+
+ <para>
+ For the server to run GTM or GTM-Standby, you need to copy the
+ following files to your path: <filename>bin/gtm</> and <filename>bin/gtm_ctl</>.
+ </para>
+
+ <para>
+ For the server to run GTM-Proxy (the server you run Coordinator and/or Datanode),
+ you need to copy the following files to your path: <filename>bin/gtm_proxy</filename>
+ and <filename>bin/gtm_ctl</>.
+ </para>
+
+ <para>
+ For server to run Coordinator or Datanode, or both, you should
+ copy the following files to your
+ path: <filename>bin/initdb</>.
+ You should also copy everything in <filename>path</> directory to
+ your library search path.
+ </para>
+
+ </step>
+
+<!## end>
<step>
@@ -2238,6 +2600,9 @@ bin/ include/ lib/ share/
<!## XC>
<productname>Postgres-XC</> server account. It will not work as
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> server account. It will not work as
+<!## end>
root.
<screen>
root# <userinput>mkdir /usr/local/pgsql/data</>
@@ -2262,6 +2627,13 @@ postgres$ <userinput>/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</>
each of them.
</para>
<!## end>
+<!## XL>
+ <para>
+ If you're configuring both Datanodes and Coordinators on the same
+ server, you should specify different <option>-D</> values for
+ each of them.
+ </para>
+<!## end>
</step>
<step>
@@ -2336,7 +2708,7 @@ postgres$ <userinput>/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</>
care of connection with other Coordinators and Datanodes. This
parameter specifies minimum number of connection to pool.
If you're not configuring <productname>XC</> cluster in
- unballanced way, you should specify the same value to all the
+ unbalanced way, you should specify the same value to all the
Coordinators.
</par>
</listitem>
@@ -2353,7 +2725,7 @@ postgres$ <userinput>/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</>
value, you will see very frequent close and ope connection
which leads to serious performance problem.
If you're not configuring <productname>XC</> cluster in
- unballanced way, you should specify the same value to all the
+ unbalanced way, you should specify the same value to all the
Coordinators.
</para>
</listitem>
@@ -2574,6 +2946,422 @@ postgres --coordinator -D /usr/local/pgsql/Coordinator
all the servers you're running Coordinators.
</para>
<!## end>
+<!## XL>
+ <step>
+&xlonly;
+ <para>
+ You should configure GTM and GTM-Proxy, as well as
+ GTM-Standby if you need high-availability capability for GTM
+ before you really run <productname>Postgres-XL</> database
+ cluster. You can do the following before you
+ run <command>initdb</>.
+ </para>
+ <para>
+ Each of GTM, GTM-Proxy and GTM need their own working directories.
+ Create them as <productname>Postgres-XL</> owner user. Please
+ assign a port number to each of them, although you don't have to do
+ any configuration work now.
+ </para>
+ </step>
+
+ <step>
+&xlonly;
+ <para>
+ Now you should configure each Coordinator and Datanode. Because
+ they have to communicate each other and number of servers,
+ Datanodes and Coordinators depend upon configurations, we do not
+ provide default configuration files for them.
+ </para>
+ <para>
+ You can configure Datanodes and Coordinators by
+ editing the <filename>postgresql.conf</> file located under the
+ directory you specified with <option>-D</> option
+ of <command>initdb</>. The following paragraphs describe what
+ parameter to edit at for Coordinators. You can specify
+ any other <filename>postgresql.conf</> parameters as
+ standalone <productname>PostgreSQL</>.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><envar>max_prepared_transactions</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ <option>max_prepared_transactions</> specifies maximum number
+ of two-phase commit transactions. Even if you don't use
+ explicit two phase commit operation, the Coordinator may issue
+ two-phase commit operation implicitly if a transaction is
+ involved with multiple Datanodes and/or Coordinators. You should
+ specify <option>max_prepared_transactions</> value at
+ least the number of <option>max_connection</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>min_pool_size</envar><term>
+ <listitem>
+&xlonly;
+ <par>
+ Coordinator is associated with a connection pooler which takes
+ care of connection with other Coordinators and Datanodes. This
+ parameter specifies minimum number of connection to pool.
+ If you're not configuring <productname>XL</> cluster in
+ unbalanced way, you should specify the same value to all the
+ Coordinators.
+ </par>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>max_pool_size</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies maximum number of the pooled
+ connection. This value should be at least more than the number
+ of all the Coordinators and Datanodes. If you specify less
+ value, you will see very frequent close and ope connection
+ which leads to serious performance problem.
+ If you're not configuring <productname>XL</> cluster in
+ unbalanced way, you should specify the same value to all the
+ Coordinators.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>pool_conn_keepalive</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies how long to keep the connection alive.
+ If older than this amount, the pooler discards the connection.
+ This parameter is useful in multi-tenant environments where
+ many connections to many different databases may be used,
+ so that idle connections may cleaned up. It is also useful
+ for automatically closing connections occasionally in case
+ there is some unknown memory leak so that this memory can be freed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>pool_maintenance_timeout</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies how long to wait until pooler
+ maintenance is performed. During such maintenance,
+ old idle connections are discarded.
+ This parameter is useful in multi-tenant environments where
+ many connections to many different databases may be used,
+ so that idle connections may cleaned up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>remote_query_cost</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies the cost overhead of setting up
+ a remote query to obtain remote data. It is used by
+ the planner in costing queries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>network_byte_cost</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter is used in query cost planning to
+ estimate the cost involved in row shipping and obtaining
+ remote data based on the expected data size.
+ Row shipping is expensive and adds latency, so this
+ setting helps to favor plans that minimizes row shipping.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>sequence_range</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter is used to get several sequence values
+ at once from GTM. This greatly speeds up COPY and INSERT SELECT
+ operations where the target table uses sequences.
+ <productname>Postgres-XL</productname> will not use this entire
+ amount at once, but will increase the request size over
+ time if many requests are done in a short time frame in
+ the same session.
+ After a short time without any sequence requests, decreases back down to 1.
+ Note that any settings here are overriden if the CACHE clause was
+ used in <xref linkend='sql-createsequence'> or <xref linkend='sql-altersequence'>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>max_coordinators</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies maximum number of the Coordinators that can
+ be added to the cluster. Cluster would have to be restarted to increase
+ the value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>max_datanodes</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies maximum number of the Datanodes that can
+ be added to the cluster. Cluster would have to be restarted to increase
+ the value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>pgxc_node_name</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specify the name of this cluster node. This name index refers to the
+ element of <link linkend="catalog-pgxc-node"><structname>pgxc_node
+ </structname></link>.node_name value, to identify the node self.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>port</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specify the port number listened to by this Coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>pooler_port</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Connection pooler needs separate port.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>gtm_port</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specify the port number of gtm you're connecting to. This is
+ local to the server and you should specify the port assigned to
+ the GTM-Proxy local to the Coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ <step>
+&xlonly;
+ <para>
+ Now you should configure <filename>postgresql.conf</> for each
+ Datanodes. Please note, as in the case of Coordinator, you can
+ specify other <filename>postgresql.conf</> parameters as in
+ standalone <productname>PostgreSQL</>.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><envar>max_connections</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ <option>max_connections</> is, in short, a maximum number of
+ background processes of the Datanode. You should be careful
+ to specify reasonable value to this parameter because each
+ Coordinator backend may have connections to all the Datanodes.
+ You should specify this value as <option>max_connections</> of
+ Coordinator multiplied by the number of Coordinators.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>max_prepared_transactions</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ <option>max_prepared_transactions</> specifies maximum number
+ of two-phase commit transactions. Even if you don't use
+ explicit two phase commit operation, Coordinator may issue
+ two-phase commit operation implicitly if a transaction is
+ involved with multiple Datanodes and/or Coordinators. The value
+ of this parameter should be at least the value
+ of <option>max_connections</> of Coordinator multiplied by the number of Coordinators.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>port</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specify the port number listened to by the Datanode.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <term><envar>gtm_port</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specify the port number of gtm you're connecting to. This is
+ local to the server and you should specify the port assigned to
+ the GTM-Proxy local to the Datanode.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ <para>
+ Postgres-XL introduces some additional parameters for the
+ Datanodes as well
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><envar>shared_queues</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ For some joins that occur in queries, data from one Datanode may
+ need to be joined with data from another Datanode.
+ <productname>Postgres-XL</productname> uses shared queues for this purpose.
+ During execution each Datanode knows if it needs to produce or consume
+ tuples, or both.
+ </para>
+ <para>
+ Note that there may be mulitple shared_queues used even for a single
+ query. So a value should be set taking into account the number of
+ connections it can accept and expected number of such joins occurring
+ simultaneously.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><envar>shared_queue_size</envar></term>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter sets the size of each each shared queue allocated.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </step>
+
+ <step>
+&xlonly;
+ <para>
+ Then you are ready to start the <productname>Postgres-XL</> cluster.
+ First, you should start GTM bu something like:
+<programlisting>
+gtm -D /usr/local/pgsql/gtm -h localhost -p 20001 -n 1 -x 1000
+</programlisting>
+ This will start GTM. <option>-h</> specifies IP address or host
+ name to listen to the connection
+ from <command>gtm_standby</>. <option>-p</> specifies the port
+ number to listen to. <option>-n</> specifies the node number
+ within GTM. This identifies GTM especially when you run
+ GTM-Standby. <option>-x</> option specifies the value of initial
+ Global Transaction ID. We need to specify this
+ because <command>initdb</> consumes some of the transaction ID
+ locally and GTM must to begin to provide global transaction ID
+ greater than the consumed one. A value of at least 2000 is believed
+ to be safe.
+ </para>
+ </step>
+
+ <step>
+&xlonly;
+ <para>
+ Next, you should start GTM-Proxy on each server you're running
+ Coordinator and/or Datanode like:
+<programlisting>
+gtm_proxy -h localhost -p 20002 -s localhost -t 20001 -i 1 -n 2 -D /usr/local/pgsql/gtm_proxy
+</programlisting>
+ This will start GTM-Proxy. <option>-h</> option is the host name
+ or IP address which GTM-Proxy listens to. <option>-p</> option
+ is the port number to listen to. <option>-s</>
+ and <option>-t</> are IP address or the host
+ name and the port number of GTM as specified
+ above. <option>-i</> is the node number of GTM-Proxy beginning
+ with 1. <option>-n</> is the number of worker thread of
+ GTM-Proxy. Usually, 1 or 2 is advised. Then <option>-D</>
+ option is the working directory of the GTM-Proxy.
+ </para>
+ <para>
+ Please note that you should start GTM-Proxy on all the servers
+ you run Coordinator/Datanode.
+ </para>
+ </step>
+
+ <step>
+&xlonly;
+ <para>
+ Now you can start Datanode on each server like:
+<programlisting>
+postgres --datanode -D /usr/local/pgsql/Datanode
+</programlisting>
+ This will start the Datanode. <option>--datanode</>
+ specifies <command>postgres</> to start as a
+ Datanode. <option>-D</> specifies the data directory of the
+ Datanode. You can specify other options of standalone <command>postgres</>.
+ </para>
+ <para>
+ Please note that you should issue <command>postgres</> command at
+ all the servers you're running Datanode.
+ </para>
+ </step>
+
+ <para>
+ Finally, you can start Coordinator like:
+<programlisting>
+postgres --coordinator -D /usr/local/pgsql/Coordinator
+</programlisting>
+ This will start the Coordinator. <option>--coordinator</>
+ specifies <command>postgres</> to start as a
+ Coordinator. <option>-D</> specifies the data directory of the
+ Coordinator. You can specify other options of standalone <command>postgres</>.
+ </para>
+ <para>
+ Please note that you should issue <command>postgres</> command at
+ all the servers you're running Coordinators.
+ </para>
+<!## end>
<step>
@@ -2639,6 +3427,45 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
</programlisting>
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The previous step should have told you how to
+ start up the whole database cluster. Do so now. The command should look
+ something like:
+<programlisting>
+postgres --datanode -D /usr/local/pgsql/Datanode
+</programlisting>
+ This will start the Datanode in the foreground. To put the Datanode
+ in the background use something like:
+<programlisting>
+nohup postgres --datanode -D /usr/local/pgsql/data \
+ &lt;/dev/null &gt;&gt;server.log 2&gt;&amp;1 &lt;/dev/null &amp;
+</programlisting>
+ You can apply this to all the other components, GTM, GTM-Proxies,
+ and Coordinators.
+ </para>
+
+ <para>
+ To stop a Datanode running in the background you can type:
+<programlisting>
+kill `cat /usr/local/pgsql/Datanode/postmaster.pid`
+</programlisting>
+ You can apply this to stop a Coordinator too.
+ </para>
+ <para>
+ To stop the GTM running in the background you can type
+<programlisting>
+kill `cat /usr/local/pgsql/gtm/gtm.pid`
+</programlisting>
+ </para>
+ <para>
+ To stop a GTM-Proxy running in the background, you can type
+<programlisting>
+kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
+</programlisting>
+ </para>
+<!## end>
</step>
@@ -2660,11 +3487,22 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
<userinput>psql -p 20004 testdb</>
</screen>
<!## end>
+<!## XL>
+&xlonly;
+<screen>
+<userinput>psql -p 20004 testdb</>
+</screen>
+<!## end>
<!## XC>
Please do not forget to give the port number of one of the
Coordinators. Then you are connected to a Coordinator listening
to the port you specified.
<!## end>
+<!## XL>
+ Please do not forget to give the port number of one of the
+ Coordinators. Then you are connected to a Coordinator listening
+ to the port you specified.
+<!## end>
<!## PG>
to connect to that database. At the prompt you can enter SQL
commands and start experimenting.
@@ -2687,6 +3525,9 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
<!## XC>
The <productname>Postgres-XC</> distribution contains a
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</> distribution contains a
+<!## end>
comprehensive documentation set, which you should read sometime.
After installation, the documentation can be accessed by
pointing your browser to
@@ -2731,6 +3572,9 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
<!## XC>
By default, <productname>Postgres-XC</> is configured to run on
<!## end>
+<!## XL>
+ By default, <productname>Postgres-XL</> is configured to run on
+<!## end>
minimal hardware. This allows it to start up with almost any
hardware configuration. The default configuration is, however,
not designed for optimum performance. To achieve optimum
@@ -2785,6 +3629,13 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
architectures may also work but are not currently being tested.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> has been tested on Intel-based CPU mainly. Other CPU
+ architectures may also work but are not currently being tested.
+ </para>
+<!## end>
<!## PG>
<para>
@@ -2807,7 +3658,13 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
also work but are not currently being tested.
</para>
<!## end>
-&xconly;
+<!## XL>
+ <para>
+ <productname>Postgres-XL</> can be expected to work on these operating systems:
+ Linux (all recent distributions), FreeBSD and Mac OS X. Other Unix-like systems may
+ also work but are not currently being tested.
+ </para>
+<!## end>
<para>
<!## PG>
@@ -2826,6 +3683,14 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
<email>[email protected]</email> is the appropriate place
to discuss that.
<!## end>
+<!## XL>
+ If you have installation problems on a platform that is known
+ to be supported according to recent build farm results, please report
+ it to <email>[email protected]</email>. If you are interested
+ in porting <productname>Postgres-XL</> to a new platform,
+ <email>[email protected]</email> is the appropriate place
+ to discuss that.
+<!## end>
</para>
</sect1>
@@ -2833,7 +3698,6 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
<sect1 id="installation-platform-notes">
<title>Platform-specific Notes</title>
-&xconly;
<para>
<!## PG>
This section documents additional platform-specific issues
@@ -2850,6 +3714,11 @@ kill `cat /usr/local/pgsql/gtm-proxy/gtm_proxy.pid
regarding the installation and setup of Postgres-XC. Be sure to
read the installation instructions.
<!## end>
+<!## XL>
+ This section documents additional platform-specific issues
+ regarding the installation and setup of Postgres-XL. Be sure to
+ read the installation instructions.
+<!## end>
</para>
<para>
diff --git a/doc-xc/src/sgml/intro.sgmlin b/doc-xc/src/sgml/intro.sgmlin
index af214273d4..e265f78d99 100644
--- a/doc-xc/src/sgml/intro.sgmlin
+++ b/doc-xc/src/sgml/intro.sgmlin
@@ -33,6 +33,26 @@
<productname>Postgres-XC</> inherits almost all major features from <productname>PostgreSQL</>.
This document is also based upon <productname>PostgreSQL</> reference manual.
<!## end>
+<!## XL>
+ This book is the official documentation of
+ <productname>Postgres-XL</productname>. It has been written by the
+ <productname>Postgres-XL</productname> developers and other
+ volunteers in parallel to the development of the
+ <productname>Postgres-XL</productname> software. It describes all
+ the functionality that the current version of
+ <productname>Postgres-XL</productname> officially supports.
+ </para>
+ <para>
+ <productname>Postgres-XL</> is essentially a collection of multiple
+ <productname>PostgreSQL</> database to provide both read and write
+ performance scalability. It also provides full-featured transaction
+ consistency as <productname>PostgreSQL</> provides, at the exception
+ of SSI which is incomplete.
+ </para>
+ <para>
+ <productname>Postgres-XL</> inherits almost all major features from <productname>PostgreSQL</>.
+ This document is also based upon <productname>PostgreSQL</> reference manual.
+<!## end>
</para>
<para>
@@ -50,6 +70,13 @@
class of users, or at users in different stages of their
<productname>Postgres-XC</productname> experience:
<!## end>
+<!## XL>
+ To make the large amount of information about
+ <productname>Postgres-XL</productname> manageable, this book has been
+ organized in several parts. Each part is targeted at a different
+ class of users, or at users in different stages of their
+ <productname>Postgres-XL</productname> experience:
+<!## end>
<itemizedlist>
<listitem>
@@ -81,6 +108,12 @@
<productname>Postgres-XC</productname> servers, be it for private
use or for others, should read this part.
<!## end>
+<!## XL>
+ <xref linkend="admin"> describes the installation and
+ administration of the server. Everyone who runs
+ <productname>Postgres-XL</productname> servers, be it for private
+ use or for others, should read this part.
+<!## end>
</para>
</listitem>
@@ -96,6 +129,11 @@
interfaces for <productname>Postgres-XC</productname> client
programs.
<!## end>
+<!## XL>
+ <xref linkend="client-interfaces"> describes the programming
+ interfaces for <productname>Postgres-XL</productname> client
+ programs.
+<!## end>
</para>
</listitem>
@@ -128,6 +166,10 @@
<xref linkend="internals"> contains assorted information that might be of
use to <productname>Postgres-XC</> developers.
<!## end>
+<!## XL>
+ <xref linkend="internals"> contains assorted information that might be of
+ use to <productname>Postgres-XL</> developers.
+<!## end>
</para>
</listitem>
</itemizedlist>
@@ -358,18 +400,21 @@ from applications, which is known as "master" server in general. In Postgres-XC,
</simpara>
</listitem>
<listitem>
- <simpara>views</simpara>
+ <simpara>
+ triggers
+ <footnote>
+ <para>
+ <productname>Postgres-XC</productname> does not support trigger in the current version. This may be supported in the future releases.
+ </para>
+ </footnote>
+ </simpara>
</listitem>
-<!## PG>
<listitem>
- <simpara>transactional integrity</simpara>
+ <simpara>views</simpara>
</listitem>
-<!## end>
-<!## XC>
<listitem>
<simpara>transactional integrity, at the exception of SSI whose support is incomplete</simpara>
</listitem>
-<!## end>
<listitem>
<simpara>multiversion concurrency control</simpara>
</listitem>
@@ -406,11 +451,296 @@ from applications, which is known as "master" server in general. In Postgres-XC,
can be used, modified, and distributed by anyone free of charge
for any purpose, be it private, commercial, or academic.
</para>
-
</sect2>
<!## end>
+<!## XL>
+ <title> What is <productname>Postgres-XL</productname>?</title>
+
+ <sect2 id="whatis-in-short">
+ <title>In short</title>
+
+ <para>
+ Postgres-XL is an open source project to provide both write-scalability
+ massively parallel processing transparently to PostgreSQL.
+ It is a collection of tightly coupled database
+ components which can be installed in more than one hardware or
+ virtual machines.
+ </para>
+
+ <para>
+ Write-scalable means Postgres-XL can be configured with as many
+ database servers as you want and handle many more writes (updating
+ SQL statements) than a single standalone database server could
+ otherwise do. You can have more than one database
+ server which all provide a single database view. Any
+ database update from any database server is immediately visible to
+ any other transactions running on different servers. Transparent
+ means you do not necessarily need to worry about how your data is stored in
+ more than one database servers internally.
+ <footnote>
+ <para>
+ Of course, you should use the information about how tables are stored
+ internally when you design the database physically to get most
+ from Postgres-XL.
+ </para>
+ </footnote>
+ </para>
+
+ <para>
+ You can configure Postgres-XL to run on more than one machines. It
+ stores your data in a distributed way, that is, partitioned or
+ replicated depending on what is chosen for each table.
+ <footnote>
+ <para>
+ To distinguish from PostgreSQL's native partitioning, we refer to this
+ as "distribution". In distributed database textbooks, this is often
+ referred to as "horizontal fragment"), and more recently, sharding.
+ </para>
+ </footnote>
+ When you issue queries, Postgres-XL determines where the target
+ data is stored and dispatches corresponding plans to the servers containing the
+ target data.
+ </para>
+
+ <para>
+ In typical web systems, you can have as many web servers or
+ application servers to handle your transactions. However, you
+ cannot do this for a database server in general because all the
+ changing data have to be visible to all the transactions. Unlike
+ other database cluster solution, Postgres-XL provides this
+ capability. You can install as many database servers as you
+ like. Each database server provides uniform data view to your
+ applications. Any database update from any server is immediately
+ visible to applications connecting the database from other
+ servers. This is on of the most important features of
+ Postgres-XL.
+ </para>
+
+ <para>
+ The other significant feature of Postgres-XL is MPP parallelism.
+ You can use Postgres-XL to handle workloads for Business Intelligence,
+ Data Warehousing, or Big Data. In Postgres-XL, a plan is generated once
+ on a coordinator, and sent down to the individual data nodes. This is
+ then executed, with the data nodes communicating directly with one another,
+ where each understands from where it is expected to receive any tuples
+ that it needs to ship, and where it needs to send to others.
+ </para>
+
+ </sect2>
+
+ <sect2 id="whatis-xc-goal">
+ <title>Postgres-XL's Goal</title>
+
+ <para>
+ The ultimate goal of Postgres-XL is to provide database
+ scalability with ACID consistency across all types of database workloads.
+ That is, Postgres-XL should provide the following features:
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ Postgres-XL should provide multiple servers to accept transactions and statements
+ from applications, which are known as "Coordinator" processes.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Any Coordinator should provide consistent database view to
+ applications. Any updates from any Coordinator must be visible in
+ real time manner as if such updates are done in single
+ PostgreSQL server.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Postgres-XL should allow Datanodes to communicate directly with one
+ another execute queries in an efficient and parallel manner.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Tables should be able to be stored in the database designated as
+ replicated or distributed (known as fragments or
+ partitions). Replication and distribution should be transparent
+ to applications; that is, such replicated and distributed tables
+ are seen as single tables and the location or number of copies of
+ each record/tuple is managed by Postgres-XL and is not visible
+ to applications.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Postgres-XL provides compatible PostgreSQL API to applications.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Postgres-XL should provide single and unified view of
+ underlying PostgreSQL database servers so that SQL statements
+ do not depend on how the tables are actually stored.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+
+ <sect2 id="whatis-xc-key-components">
+ <title>Postgres-XL Key Components</title>
+ <para>
+ In this section, we will describe the main components of Postgres-XL.
+ </para>
+
+ <para>
+ Postgres-XL is composed of three major components: the GTM
+ (Global Transaction Manager), the Coordinator and the Datanode. Their
+ features are given in the following sections.
+ </para>
+
+ <sect3>
+ <title>GTM (Global Transaction Manager)</title>
+
+ <para>
+ The GTM is a key component of Postgres-XL to provide consistent
+ transaction management and tuple visibility control.
+ </para>
+
+ <para>
+ As described later in this
+ manual, <productname>PostgreSQL</productname>'s transaction
+ management is based upon MVCC (Multi-Version Concurrency Control)
+ technology. <productname>Postgres-XL</productname> extracts this
+ technology into separate component as GTM so that
+ any <productname>Postgres-XL</productname> component's
+ transaction management is based upon single global status.
+ Details will be described in <xref linkend="overview">.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Coordinator</title>
+
+ <para>
+ The Coordinator is an interface to the database for applications. It acts like
+ conventional PostgreSQL backend process, however the Coordinator
+ does not store any actual data. The actual data is stored by the Datanodes
+ as described below. The Coordinator receives SQL statements, gets Global
+ Transaction Id and Global Snapshots as needed, determines which
+ Datanodes are involved and asks them to execute (a part of)
+ statement. When issuing statement to Datanodes, it is
+ associated with GXID and Global Snapshot so that Multi-version Concurrency Control
+ (MVCC) properties extend cluster-wide.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Datanode</title>
+
+ <para>
+ The Datanode actually stores user data. Tables may be distributed
+ among Datanodes, or replicated to all the Datanodes.
+ The Datanode does not have global view of the whole database, it
+ just takes care of locally stored data. Incoming statement is
+ examined by the Coordinator as described next, and subplans are
+ made. These are then transferred to
+ each Datanode involved together with GXID and Global Snapshot
+ as needed. The datanode may receive request from various
+ Coordinators in separate sessions. However, because each the
+ transaction is identified
+ uniquely and associated with consistent (global) snapshot, each Datanode
+ can properly execute in its transaction and snapshot context.
+ </para>
+
+ </sect3>
+
+ </sect2>
+
+ <sect2 id="whatis-xc-inherits-postgresql">
+ <title><productname>Postgres-XL</productname> Inherits From <productname>PostgreSQL</productname></title>
+
+ <para>
+ <productname>Postgres-XL</productname> is an extension
+ to <productname>PostgreSQL</productname> and inherits most of its
+ features.
+ </para>
+
+ <para>
+ It is an open-source descendant of
+ <productname>PostgreSQL</productname> and its
+ original Berkeley code. It supports a large part of the SQL
+ standard and offers many modern features:
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <simpara>complex queries</simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ foreign keys
+ <footnote>
+ <para>
+ <productname>Postgres-XL</productname>'s foreign key usage has some restrictions. For details, see <xref linkend="SQL-CREATETABLE">.
+ </para>
+ </footnote>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ triggers
+ <footnote>
+ <para>
+ <productname>Postgres-XL</productname> does not support trigger in the current version. This may be supported in the future releases.
+ </para>
+ </footnote>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>views</simpara>
+ </listitem>
+ <listitem>
+ <simpara>transactional integrity, at the exception of SSI whose support is incomplete</simpara>
+ </listitem>
+ <listitem>
+ <simpara>multiversion concurrency control</simpara>
+ </listitem>
+ </itemizedlist>
+
+ Also, similar to <productname>PostgreSQL</productname>, <productname>Postgres-XL</productname> can be extended by the
+ user in many ways, for example by adding new
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <simpara>data types</simpara>
+ </listitem>
+ <listitem>
+ <simpara>functions</simpara>
+ </listitem>
+ <listitem>
+ <simpara>operators</simpara>
+ </listitem>
+ <listitem>
+ <simpara>aggregate functions</simpara>
+ </listitem>
+ <listitem>
+ <simpara>index methods</simpara>
+ </listitem>
+ <listitem>
+ <simpara>procedural languages</simpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <productname>Postgres-XL</productname>
+ can be used, modified, and distributed by anyone free of charge
+ for any purpose, be it private, commercial, or academic, provided it
+ adheres to the Mozilla Public License version 2.
+ </para>
+
+ </sect2>
+
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/keywords.sgmlin b/doc-xc/src/sgml/keywords.sgmlin
index 9f0a4470b6..48a30616a6 100644
--- a/doc-xc/src/sgml/keywords.sgmlin
+++ b/doc-xc/src/sgml/keywords.sgmlin
@@ -419,6 +419,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>BARRIER</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>BASE64</token></entry>
<entry></entry>
@@ -789,6 +799,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>CLEAN</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>CLOB</token></entry>
<entry></entry>
@@ -1639,6 +1659,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>DISTRIBUTE</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>DLNEWCOPY</token></entry>
<entry></entry>
@@ -2329,6 +2359,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>HASH</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>HAVING</token></entry>
<entry>reserved</entry>
@@ -3203,6 +3243,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>MODULO</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>MONTH</token></entry>
<entry>non-reserved</entry>
@@ -4317,6 +4367,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>REPLICATION</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>REQUIRING</token></entry>
<entry></entry>
@@ -4455,6 +4515,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>ROBIN</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>ROLE</token></entry>
<entry>non-reserved</entry>
@@ -4489,6 +4559,16 @@
<entry></entry>
</row>
<!## end>
+<!## XL>
+ <row>
+ <entry><token>ROUNG</token></entry>
+ <entry>non-reserved (XL only)</entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ <entry></entry>
+ </row>
+<!## end>
<row>
<entry><token>ROUTINE</token></entry>
<entry></entry>
diff --git a/doc-xc/src/sgml/legal.sgmlin b/doc-xc/src/sgml/legal.sgmlin
index d7deaa424a..a6bec857da 100644
--- a/doc-xc/src/sgml/legal.sgmlin
+++ b/doc-xc/src/sgml/legal.sgmlin
@@ -10,6 +10,16 @@
<holder>Postgres-XC Development Group</holder>
</copyright>
<!## end>
+<!## XL>
+<copyright>
+ <year>2009-2012</year>
+ <holder>Postgres-XC Development Group</holder>
+</copyright>
+<copyright>
+ <year>2012-2014</year>
+ <holder>TransLattice, Inc.</holder>
+</copyright>
+<!## end>
<legalnotice id="legalnotice">
<title>Legal Notice</title>
@@ -26,8 +36,393 @@
2010-2012 by Postgres-XC Development Group, and is distributed under
the terms of the license of the University of California below.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is Copyright &copy; 2012-2014
+ by TransLattice, Inc. and distributed under the terms of the license
+ below.
+ </para>
+ <screen>
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
+</screen>
+ <para>
+
+<!## end>
+
</para>
+<!## PG>
<para>
<productname>Postgres95</productname> is Copyright &copy; 1994-5
by the Regents of the University of California.
@@ -56,6 +451,6 @@
PROVIDED HEREUNDER IS ON AN <quote>AS-IS</quote> BASIS, AND THE UNIVERSITY OF
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- </para>
-
+ </pre>
+<!## end>
</legalnotice>
diff --git a/doc-xc/src/sgml/libpq.sgmlin b/doc-xc/src/sgml/libpq.sgmlin
index b064263547..83ae5ab1e9 100644
--- a/doc-xc/src/sgml/libpq.sgmlin
+++ b/doc-xc/src/sgml/libpq.sgmlin
@@ -30,6 +30,15 @@
backend server and to receive the results of these queries.
</para>
<!## end>
+<!## XL>
+ <para>
+ <application>libpq</application> is the <acronym>C</acronym>
+ application programmer's interface to <productname>Postgres-XL</> inherited from <productname>PostgreSQL</>.
+ <application>libpq</> is a set of library functions that allow
+ client programs to pass queries to the <productname>Postgres-XL</>
+ backend server and to receive the results of these queries.
+ </para>
+<!## end>
<para>
<application>libpq</> is also the underlying engine for several
@@ -39,6 +48,9 @@
<!## XC>
other <productname>Postgres-XC</> application interfaces, including
<!## end>
+<!## XL>
+ other <productname>Postgres-XL</> application interfaces, including
+<!## end>
those written for C++, Perl, Python, Tcl and <application>ECPG</>.
So some aspects of <application>libpq</>'s behavior will be
important to you if you use one of those packages. In particular,
@@ -74,6 +86,9 @@
<!## XC>
<productname>Postgres-XC</productname> backend server. An
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> backend server. An
+<!## end>
application program can have several backend connections open at
one time. (One reason to do that is to access more than one
database.) Each connection is represented by a
@@ -171,6 +186,9 @@ PGconn *PQconnectdbParams(const char **keywords, const char **values, int expand
<!## XC>
when <productname>Postgres-XC</> was built). On machines without
<!## end>
+<!## XL>
+ when <productname>Postgres-XL</> was built). On machines without
+<!## end>
Unix-domain sockets, the default is to connect to <literal>localhost</>.
</para>
</listitem>
@@ -265,6 +283,9 @@ PGconn *PQconnectdbParams(const char **keywords, const char **values, int expand
<!## XC>
<productname>Postgres-XC</productname> user name to connect as.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> user name to connect as.
+<!## end>
Defaults to be the same as the operating system name of the user
running the application.
</para>
@@ -494,6 +515,9 @@ PGconn *PQconnectdbParams(const char **keywords, const char **values, int expand
<!## XC>
If <productname>Postgres-XC</> is compiled without SSL support,
<!## end>
+<!## XL>
+ If <productname>Postgres-XL</> is compiled without SSL support,
+<!## end>
using options <literal>require</>, <literal>verify-ca</>, or
<literal>verify-full</> will cause an error, while
options <literal>allow</> and <literal>prefer</> will be
@@ -528,6 +552,9 @@ PGconn *PQconnectdbParams(const char **keywords, const char **values, int expand
<!## XC>
<productname>Postgres-XC</> is compiled with SSL support.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> is compiled with SSL support.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -1582,6 +1609,9 @@ int PQprotocolVersion(const PGconn *conn);
<!## XC>
theoretically change during a connection reset.
<!## end>
+<!## XL>
+ theoretically change during a connection reset.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -3320,6 +3350,11 @@ char *PQescapeLiteral(PGconn *conn, const char *str, size_t length);
string literal parser. A terminating zero byte is also added. The
single quotes that must surround <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ be properly processed by the <productname>Postgres-XL</productname>
+ string literal parser. A terminating zero byte is also added. The
+ single quotes that must surround <productname>Postgres-XL</productname>
+<!## end>
string literals are included in the result string.
</para>
@@ -3429,6 +3464,9 @@ size_t PQescapeStringConn(PGconn *conn,
<!## XC>
single quotes that must surround <productname>Postgres-XC</> string
<!## end>
+<!## XL>
+ single quotes that must surround <productname>Postgres-XL</> string
+<!## end>
literals; they should be provided in the SQL command that the
result is inserted into. The parameter <parameter>from</> points to
the first character of the string that is to be escaped, and the
@@ -3494,6 +3532,9 @@ size_t PQescapeString (char *to, const char *from, size_t length);
<!## XC>
client programs that work with only one <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ client programs that work with only one <productname>Postgres-XL</>
+<!## end>
connection at a time (in this case it can find out what it needs to
know <quote>behind the scenes</>). In other contexts it is a security
hazard and should be avoided in favor of
@@ -3565,6 +3606,12 @@ unsigned char *PQescapeByteaConn(PGconn *conn,
terminating zero byte is also added. The single quotes that must
surround <productname>Postgres-XC</productname> string literals are
<!## end>
+<!## XL>
+ be properly processed by the <productname>Postgres-XL</productname>
+ string literal parser, and the <type>bytea</type> input function. A
+ terminating zero byte is also added. The single quotes that must
+ surround <productname>Postgres-XL</productname> string literals are
+<!## end>
not part of the result string.
</para>
@@ -3613,6 +3660,9 @@ unsigned char *PQescapeBytea(const unsigned char *from,
<!## XC>
client programs that work with only one <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ client programs that work with only one <productname>Postgres-XL</>
+<!## end>
connection at a time (in this case it can find out what it needs
to know <quote>behind the scenes</>). In other contexts it is
a security hazard and should be avoided in favor of
@@ -4338,6 +4388,9 @@ int PQrequestCancel(PGconn *conn);
<!## XC>
<productname>Postgres-XC</productname> provides a fast-path interface
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides a fast-path interface
+<!## end>
to send simple function calls to the server.
</para>
@@ -4431,6 +4484,14 @@ typedef struct
and <command>UNLISTEN</> commands yet.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> does not
+ support <command>NOTIFY</>, <command>LISTEN</>
+ and <command>UNLISTEN</> commands yet.
+ </para>
+<!## end>
<!## PG>
<para>
<productname>PostgreSQL</productname> offers asynchronous notification
@@ -4533,6 +4594,9 @@ typedef struct pgNotify
<!## XC>
<productname>Postgres-XC</productname> has options to read from or write
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> has options to read from or write
+<!## end>
to the network connection used by <application>libpq</application>.
The functions described in this section allow applications to take
advantage of this capability by supplying or consuming copied data.
@@ -5283,6 +5347,9 @@ void PQconninfoFree(PQconninfoOption *connOptions);
<!## XC>
Prepares the encrypted form of a <productname>Postgres-XC</> password.
<!## end>
+<!## XL>
+ Prepares the encrypted form of a <productname>Postgres-XL</> password.
+<!## end>
<synopsis>
char * PQencryptPassword(const char *passwd, const char *user);
</synopsis>
@@ -6370,6 +6437,9 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough)
<!## XC>
<productname>Postgres-XC</productname>, if it is different from the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, if it is different from the
+<!## end>
local realm. If <envar>PGREALM</envar> is set,
<application>libpq</application> applications will attempt
authentication with servers for this realm and use separate ticket
@@ -6786,6 +6856,9 @@ ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)
<!## XC>
<productname>Postgres-XC</> has native support for using <acronym>SSL</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> has native support for using <acronym>SSL</>
+<!## end>
connections to encrypt client/server communications for increased
security. See <xref linkend="ssl-tcp"> for details about the server-side
<acronym>SSL</> functionality.
@@ -7340,6 +7413,9 @@ foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
<!## XC>
Point your compiler to the directory where the <productname>Postgres-XC</> header
<!## end>
+<!## XL>
+ Point your compiler to the directory where the <productname>Postgres-XL</> header
+<!## end>
files were installed, by supplying the
<literal>-I<replaceable>directory</replaceable></literal> option
to your compiler. (In some cases the compiler will look into
@@ -7686,6 +7762,130 @@ main(int argc, char **argv)
]]>
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+<![CDATA[
+/*
+ * testlibpq.c
+ *
+ * Test the C version of libpq, the Postgres-XL frontend library.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <libpq-fe.h>
+
+static void
+exit_nicely(PGconn *conn)
+{
+ PQfinish(conn);
+ exit(1);
+}
+
+int
+main(int argc, char **argv)
+{
+ const char *conninfo;
+ PGconn *conn;
+ PGresult *res;
+ int nFields;
+ int i,
+ j;
+
+ /*
+ * If the user supplies a parameter on the command line, use it as the
+ * conninfo string; otherwise default to setting dbname=postgres and using
+ * environment variables or defaults for all other connection parameters.
+ */
+ if (argc > 1)
+ conninfo = argv[1];
+ else
+ conninfo = "dbname = postgres";
+
+ /* Make a connection to the database */
+ conn = PQconnectdb(conninfo);
+
+ /* Check to see that the backend connection was successfully made */
+ if (PQstatus(conn) != CONNECTION_OK)
+ {
+ fprintf(stderr, "Connection to database failed: %s",
+ PQerrorMessage(conn));
+ exit_nicely(conn);
+ }
+
+ /*
+ * Our test case here involves using a cursor, for which we must be inside
+ * a transaction block. We could do the whole thing with a single
+ * PQexec() of "select * from pg_database", but that's too trivial to make
+ * a good example.
+ */
+
+ /* Start a transaction block */
+ res = PQexec(conn, "BEGIN");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
+ PQclear(res);
+ exit_nicely(conn);
+ }
+
+ /*
+ * Should PQclear PGresult whenever it is no longer needed to avoid memory
+ * leaks
+ */
+ PQclear(res);
+
+ /*
+ * Fetch rows from pg_database, the system catalog of databases
+ */
+ res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
+ PQclear(res);
+ exit_nicely(conn);
+ }
+ PQclear(res);
+
+ res = PQexec(conn, "FETCH ALL in myportal");
+ if (PQresultStatus(res) != PGRES_TUPLES_OK)
+ {
+ fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
+ PQclear(res);
+ exit_nicely(conn);
+ }
+
+ /* first, print out the attribute names */
+ nFields = PQnfields(res);
+ for (i = 0; i < nFields; i++)
+ printf("%-15s", PQfname(res, i));
+ printf("\n\n");
+
+ /* next, print out the rows */
+ for (i = 0; i < PQntuples(res); i++)
+ {
+ for (j = 0; j < nFields; j++)
+ printf("%-15s", PQgetvalue(res, i, j));
+ printf("\n");
+ }
+
+ PQclear(res);
+
+ /* close the portal ... we don't bother to check for errors ... */
+ res = PQexec(conn, "CLOSE myportal");
+ PQclear(res);
+
+ /* end the transaction */
+ res = PQexec(conn, "END");
+ PQclear(res);
+
+ /* close the connection to the database and cleanup */
+ PQfinish(conn);
+
+ return 0;
+}
+]]>
+</programlisting>
+<!## end>
</example>
<example id="libpq-example-2">
diff --git a/doc-xc/src/sgml/lo.sgmlin b/doc-xc/src/sgml/lo.sgmlin
index 0b9ecbd29d..f21d8a0de5 100644
--- a/doc-xc/src/sgml/lo.sgmlin
+++ b/doc-xc/src/sgml/lo.sgmlin
@@ -6,15 +6,23 @@
<indexterm zone="lo">
<primary>lo</primary>
</indexterm>
-&xconly;
<!## XC>
+&xconly;
<para>
<productname>Postgres-XC</> doesn't support the
module <filename>lo</> because it depends upon
consistent <literal>OID</> and triggers.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> doesn't support the
+ module <filename>lo</> because it depends upon
+ consistent <literal>OID</> and triggers.
+ </para>
+<!## end>
<!## PG>
diff --git a/doc-xc/src/sgml/lobj.sgmlin b/doc-xc/src/sgml/lobj.sgmlin
index bef3495c09..59fef80e68 100644
--- a/doc-xc/src/sgml/lobj.sgmlin
+++ b/doc-xc/src/sgml/lobj.sgmlin
@@ -17,6 +17,17 @@
to handle the large object as OID is inconsistent among cluster nodes.
</para>
<!## end>
+<!## XL>
+<!-- NOTICE:
+ Need API improvement and unique OID throughout the cluster to support large objects
+-->
+&xlonly;
+ <para>
+ Large objects are not supported by <productname>Postgres-XL</>.
+ <productname>Postgres-XL</> does not provide consistent means
+ to handle the large object as OID is inconsistent among cluster nodes.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/ltree.sgmlin b/doc-xc/src/sgml/ltree.sgmlin
index e720d1960b..608eaa9263 100644
--- a/doc-xc/src/sgml/ltree.sgmlin
+++ b/doc-xc/src/sgml/ltree.sgmlin
@@ -15,8 +15,15 @@
Extensive facilities for searching through label trees are provided.
</para>
-&xconly;
<!## XC>
+&xconly;
+ <para>
+ Please note that a column of the type <type>ltree</> cannot be a
+ distribution column.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
<para>
Please note that a column of the type <type>ltree</> cannot be a
distribution column.
diff --git a/doc-xc/src/sgml/maintenance.sgmlin b/doc-xc/src/sgml/maintenance.sgmlin
index 19e682a033..40d350603c 100644
--- a/doc-xc/src/sgml/maintenance.sgmlin
+++ b/doc-xc/src/sgml/maintenance.sgmlin
@@ -19,6 +19,13 @@
tasks should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ This chapter describes database maintenance tasks
+ of individual Coordinators and Datanodes.
+ </para>
+<!## end>
&common;
@@ -36,7 +43,19 @@
<!## end>
<!## XC>
<para>
- <productname>Postgres-XC</> inherits most of its funcamentals from <productname>PostgreSQL</>. Like any database software, requires that certain tasks
+ <productname>Postgres-XC</> inherits most of its fundamentals from <productname>PostgreSQL</>. Like any database software, requires that certain tasks
+ be performed regularly to achieve optimum performance. The tasks
+ discussed here are <emphasis>required</emphasis>, but they
+ are repetitive in nature and can easily be automated using standard
+ tools such as <application>cron</application> scripts or
+ Windows' <application>Task Scheduler</>. It is the database
+ administrator's responsibility to set up appropriate scripts, and to
+ check that they execute successfully.
+ </para>
+<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</> inherits most of its fundamentals from <productname>PostgreSQL</>. Like any database software, it requires that certain tasks
be performed regularly to achieve optimum performance. The tasks
discussed here are <emphasis>required</emphasis>, but they
are repetitive in nature and can easily be automated using standard
@@ -67,6 +86,16 @@
<xref linkend="backup">.
</para>
<!## end>
+<!## XL>
+ <para>
+ One obvious maintenance task is the creation of backup copies of the data on a
+ regular schedule. Without a recent backup, you have no chance of recovery
+ after a catastrophe (disk failure, fire, mistakenly dropping a critical
+ table, etc.). The backup and recovery mechanisms available in
+ <productname>Postgres-XL</productname> are discussed at length in
+ <xref linkend="backup">.
+ </para>
+<!## end>
<para>
The other main category of maintenance task is periodic <quote>vacuuming</>
@@ -111,6 +140,13 @@
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -121,6 +157,9 @@
<!## XC>
<productname>Postgres-XC</> databases require periodic
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> databases require periodic
+<!## end>
maintenance known as <firstterm>vacuuming</>. For many installations, it
is sufficient to let vacuuming be performed by the <firstterm>autovacuum
daemon</>, which is described in <xref linkend="autovacuum">. You might
@@ -144,6 +183,13 @@
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -154,6 +200,9 @@
<!## XC>
<productname>Postgres-XC</productname>'s
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s
+<!## end>
<xref linkend="sql-vacuum"> command has to
process each table on a regular basis for several reasons:
@@ -171,6 +220,9 @@
<!## XC>
<productname>Postgres-XC</productname> query planner.</simpara>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> query planner.</simpara>
+<!## end>
</listitem>
<listitem>
@@ -222,6 +274,13 @@
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -232,6 +291,9 @@
<!## XC>
In <productname>Postgres-XC</productname>, an
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname>, an
+<!## end>
<command>UPDATE</> or <command>DELETE</> of a row does not
immediately remove the old version of the row.
This approach is necessary to gain the benefits of multiversion
@@ -350,6 +412,13 @@
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -360,6 +429,9 @@
<!## XC>
As in <productname>PostgreSQL</>, <productname>Postgres-XC</productname> query planner relies on
<!## end>
+<!## XL>
+ As in <productname>PostgreSQL</>, <productname>Postgres-XL</productname> query planner relies on
+<!## end>
statistical information about the contents of tables in order to
generate good plans for queries. These statistics are gathered by
the <xref linkend="sql-analyze"> command,
@@ -443,6 +515,13 @@
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -453,6 +532,9 @@
<!## XC>
<productname>Postgres-XC</productname>'s MVCC transaction semantics
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s MVCC transaction semantics
+<!## end>
depend on being able to compare transaction ID (<acronym>XID</>)
numbers: a row version with an insertion XID greater than the current
transaction's XID is <quote>in the future</> and should not be visible
@@ -475,6 +557,14 @@
global transaction manager (<acronym>GTM</>).
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <productname>Postgres-XL</>'s transaction is
+ called global transaction ID (<acronym>GXID</>) and is supplied by
+ global transaction manager (<acronym>GTM</>).
+ </para>
+<!## end>
&common;
<para>
The reason that periodic vacuuming solves the problem is that
@@ -484,6 +574,9 @@
<!## XC>
<productname>Postgres-XC</productname> reserves a special XID
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> reserves a special XID
+<!## end>
as <literal>FrozenXID</>. This XID does not follow the normal XID
comparison rules and is always considered older
than every normal XID. Normal XIDs are
@@ -697,6 +790,13 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -707,6 +807,9 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
<!## XC>
<productname>Postgres-XC</productname> has an optional but highly
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> has an optional but highly
+<!## end>
recommended feature called <firstterm>autovacuum</firstterm>,
whose purpose is to automate the execution of
<command>VACUUM</command> and <command>ANALYZE </command> commands.
@@ -849,6 +952,13 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -898,6 +1008,13 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu
Coordinator and Datanode. It should be done for each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that this section describes the task of individual
+ Coordinator and Datanode. It should be done for each of them.
+ </para>
+<!## end>
&common;
@@ -924,6 +1041,9 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu
<!## XC>
<productname>Postgres-XC</productname> in a development environment,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> in a development environment,
+<!## end>
but few production servers would find this behavior acceptable.
</para>
@@ -950,6 +1070,9 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu
<!## XC>
can be used with <productname>Postgres-XC</productname>. To do this,
<!## end>
+<!## XL>
+ can be used with <productname>Postgres-XL</productname>. To do this,
+<!## end>
just pipe the server's
<systemitem>stderr</> output to the desired program.
If you start the server with
diff --git a/doc-xc/src/sgml/manage-ag.sgmlin b/doc-xc/src/sgml/manage-ag.sgmlin
index 7f848762bb..fc8fc68bb4 100644
--- a/doc-xc/src/sgml/manage-ag.sgmlin
+++ b/doc-xc/src/sgml/manage-ag.sgmlin
@@ -13,6 +13,9 @@
<!## XC>
Every instance of a running <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ Every instance of a running <productname>Postgres-XL</productname>
+<!## end>
server manages one or more databases. Databases are therefore the
topmost hierarchical level for organizing <acronym>SQL</acronym>
objects (<quote>database objects</quote>). This chapter describes
@@ -54,6 +57,9 @@
<!## XC>
connection level. If one <productname>Postgres-XC</> server
<!## end>
+<!## XL>
+ connection level. If one <productname>Postgres-XL</> server
+<!## end>
instance is to house projects or users that should be separate and
for the most part unaware of each other, it is therefore
recommendable to put them into separate databases. If the projects
@@ -99,6 +105,9 @@ SELECT datname FROM pg_database;
<!## XC>
In order to create a database, the <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ In order to create a database, the <productname>Postgres-XL</>
+<!## end>
server must be up and running (see <xref
linkend="server-start">).
</para>
@@ -218,6 +227,9 @@ createdb -O <replaceable>rolename</> <replaceable>dbname</>
<!## XC>
<productname>Postgres-XC</productname>. <literal>template0</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. <literal>template0</>
+<!## end>
should never be changed after the database cluster has been
initialized. By instructing
<command>CREATE DATABASE</> to copy <literal>template0</> instead
@@ -308,6 +320,16 @@ createdb -T template0 <replaceable>dbname</>
database is created.
</para>
<!## end>
+<!## XL>
+ <para>
+ <emphasis>For Postgres-XL only.</>
+ </para>
+ <para>
+ In <productname>Postgres-XL</>, template databases are held in
+ each Coordinator and Datanode. They are locally copied when new
+ database is created.
+ </para>
+<!## end>
</note>
</sect1>
@@ -322,6 +344,9 @@ createdb -T template0 <replaceable>dbname</>
<!## XC>
<productname>Postgres-XC</> server provides a large number of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> server provides a large number of
+<!## end>
run-time configuration variables. You can set database-specific
default values for many of these settings.
</para>
@@ -399,6 +424,9 @@ dropdb <replaceable class="parameter">dbname</replaceable>
<!## XC>
Tablespaces in <productname>Postgres-XC</> allow database administrators to
<!## end>
+<!## XL>
+ Tablespaces in <productname>Postgres-XL</> allow database administrators to
+<!## end>
define locations in the file system where the files representing
database objects can be stored. Once created, a tablespace can be referred
to by name when creating database objects.
@@ -412,6 +440,9 @@ dropdb <replaceable class="parameter">dbname</replaceable>
<!## XC>
of a <productname>Postgres-XC</> installation. This is useful in at
<!## end>
+<!## XL>
+ of a <productname>Postgres-XL</> installation. This is useful in at
+<!## end>
least two ways. First, if the partition or volume on which the
cluster was initialized runs out of space and cannot be extended,
a tablespace can be created on a different partition and used
@@ -442,6 +473,9 @@ CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';
<!## XC>
the <productname>Postgres-XC</> operating system user. All objects subsequently
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</> operating system user. All objects subsequently
+<!## end>
created within the tablespace will be stored in files underneath this
directory.
</para>
@@ -457,6 +491,9 @@ CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';
<!## XC>
<productname>Postgres-XC</> does not enforce any such limitation, and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> does not enforce any such limitation, and
+<!## end>
indeed it is not directly aware of the file system boundaries on your
system. It just stores files in the directories you tell it to use.
</para>
@@ -553,6 +590,9 @@ SELECT spcname FROM pg_tablespace;
<!## XC>
<productname>Postgres-XC</> makes use of symbolic links
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> makes use of symbolic links
+<!## end>
to simplify the implementation of tablespaces. This
means that tablespaces can be used <emphasis>only</> on systems
that support symbolic links.
diff --git a/doc-xc/src/sgml/mvcc.sgmlin b/doc-xc/src/sgml/mvcc.sgmlin
index 755ea48715..cfd47dee30 100644
--- a/doc-xc/src/sgml/mvcc.sgmlin
+++ b/doc-xc/src/sgml/mvcc.sgmlin
@@ -38,6 +38,26 @@
consistent way as if they are running in single database.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ This chapter describes the behavior of the
+ <productname>Postgres-XL</productname> database system when two or
+ more sessions try to access the same data at the same time. The
+ goals in that situation are to allow efficient access for all
+ sessions while maintaining strict data integrity. Every developer
+ of database applications should be familiar with the topics covered
+ in this chapter.
+ </para>
+ <para>
+ <productname>Postgres-XL</> inherited concurrency control
+ from <productname>PostgreSQL</> and extended it globally to all of the
+ Coordinators and Datanodes involved. Regardless of what
+ Coordinator is connected to, all of the transactions
+ in the <productname>Postgres-XL</> database cluster behaves in
+ a consistent way as if they are running in single database.
+ </para>
+<!## end>
<sect1 id="mvcc-intro">
<title>Introduction</title>
@@ -96,6 +116,25 @@
performance in multiuser environments.
</para>
<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</productname> inherits a rich set of tools
+ for developers to manage concurrent access to data from <productname>PostgreSQL</>. Internally,
+ data consistency is maintained by using a multiversion
+ model (Multiversion Concurrency Control, <acronym>MVCC</acronym>).
+ This means that while querying a database each transaction sees
+ a snapshot of data (a <firstterm>database version</firstterm>)
+ as it was some
+ time ago, regardless of the current state of the underlying data.
+ This protects the transaction from viewing inconsistent data that
+ could be caused by (other) concurrent transaction updates on the same
+ data rows, providing <firstterm>transaction isolation</firstterm>
+ for each database session. <acronym>MVCC</acronym>, by eschewing
+ explicit locking methodologies of traditional database systems,
+ minimizes lock contention in order to allow for reasonable
+ performance in multiuser environments.
+ </para>
+<!## end>
<para>
The main advantage of using the <acronym>MVCC</acronym> model of
@@ -129,6 +168,15 @@
locks provide a mechanism for acquiring locks that are not tied
to a single transaction.
<!## end>
+<!## XL>
+ As in <productname>PostgreSQL</>, table- and row-level locking facilities are also available in
+ <productname>Postgres-XL</productname> for applications that cannot
+ adapt easily to <acronym>MVCC</acronym> behavior. However, proper
+ use of <acronym>MVCC</acronym> will generally provide better
+ performance than locks. In addition, application-defined advisory
+ locks provide a mechanism for acquiring locks that are not tied
+ to a single transaction.
+<!## end>
</para>
</sect1>
@@ -299,6 +347,9 @@
<!## XC>
In <productname>Postgres-XC</productname>, you can request any of the
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname>, you can request any of the
+<!## end>
four standard transaction isolation levels. But internally, there are
only three distinct isolation levels, which correspond to the levels Read
Committed, Repeatable Read, and Serializable. When you select the level Read
@@ -314,6 +365,9 @@
<!## XC>
phenomena must happen. The reason that <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ phenomena must happen. The reason that <productname>Postgres-XL</>
+<!## end>
only provides three isolation levels is that this is the only
sensible way to map the standard isolation levels to the multiversion
concurrency control architecture. The behavior of the available
@@ -1268,6 +1322,17 @@ UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
to timeout.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <productname>Postgres-XL</> does not detect
+ deadlocks which are spread among multiple Coordinators and/or
+ Datanodes, known as global deadlocks.
+ Until this is implemented in
+ <productname>Postgres-XL</>, global deadlocks can be
+ detected based on statement_timeout.
+ </para>
+<!## end>
</sect2>
@@ -1334,6 +1399,28 @@ UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
<link linkend="view-pg-locks"><structname>pg_locks</structname></link>
system view.
<!## end>
+<!## XL>
+ As in <productname>PostgreSQL</productname>, <productname>Postgres-XL</> provides a means for
+ creating locks that have application-defined meanings. These are
+ called <firstterm>advisory locks</>, because the system does not
+ enforce their use &mdash; it is up to the application to use them
+ correctly. Advisory locks can be useful for locking strategies
+ that are an awkward fit for the MVCC model. Once acquired, an
+ advisory lock is held until explicitly released or the session ends.
+ Unlike standard locks, advisory locks do not
+ honor transaction semantics: a lock acquired during a
+ transaction that is later rolled back will still be held following the
+ rollback, and likewise an unlock is effective even if the calling
+ transaction fails later. The same lock can be acquired multiple times by
+ its owning process: for each lock request there must be a corresponding
+ unlock request before the lock is actually released. (If a session
+ already holds a given lock, additional requests will always succeed, even
+ if other sessions are awaiting the lock.) Like all locks in
+ <productname>PostgreSQL</productname>, a complete list of advisory
+ locks currently held by any session can be found in the
+ <link linkend="view-pg-locks"><structname>pg_locks</structname></link>
+ system view.
+<!## end>
</para>
<para>
@@ -1357,6 +1444,15 @@ UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
using <type>EXECUTE DIRECT</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <productname>Postgres-XL</>'s advisory lock is
+ local to each Coordinator or Datanode. If you wish to acquire
+ advisory locks on different Coordinator, you should do it manually
+ using <type>EXECUTE DIRECT</> statement.
+ </para>
+<!## end>
<para>
A common use of advisory locks is to emulate pessimistic locking
@@ -1698,4 +1794,79 @@ SELECT pg_advisory_lock(q.id) FROM
</para>
</sect1>
<!## end>
+<!## XL>
+ <sect1 id="global-transaction-management">
+ <title><productname>Postgres-XL</productname>'s Global Transaction Management</title>
+
+ <indexterm>
+ <primary>Global Transaction Management</primary>
+ </indexterm>
+
+&xlonly;
+
+ <para>
+ The above sections
+ described <productname>Postgres-XL</productname>'s concurrency
+ control and MVCC common to <productname>PostgreSQL</productname>.
+ This section describes how <productname>Postgres-XL</productname>
+ implements global concurrency control and MVCC among multiple
+ Coordinators and Datanodes.
+ </para>
+
+ <para>
+ In conventional replication clusters, you can run read
+ transactions concurrently in multiple standby, or slave
+ servers. Replication servers provide read scalability. However,
+ you cannot issue write transactions to standby servers because
+ they don't have means to propagate changes safely. They cannot
+ maintain consistent view of database to applications for write
+ operations, unless you issue write transactions to single master
+ server.
+ </para>
+
+ <para>
+ Postgres-XL is different.
+ </para>
+
+ <para>
+ As described
+ in <xref linkend="intro-whatis">, <productname>Postgres-XL</productname>
+ is composed of a GTM (Global Transaction Manager), Coordinators and
+ Datanodes.
+ </para>
+
+ <para>
+ In <productname>Postgres-XL</productname>, any Coordinator can
+ accept any transaction, regardless whether it is read only or
+ read/write. Transaction integrity is enforced by GTM (Global
+ Transaction Manager). Because we have multiple Coordinators, each
+ of them can handle incoming transactions and statements in
+ parallel.
+ </para>
+
+ <para>
+ Analyzed statements are converted into internal plans, which
+ include SQL statements targeted to Datanodes. Plans are sent on to
+ each target Datanode, handled, and the result is sent back to
+ the originating Coordinator where all the results from target
+ Datanodes will be combined into the result to be sent back to the
+ application.
+ </para>
+
+ <para>
+ Each table can be distributed or replicated as described
+ in <xref linkend="intro-whatis">. If you design each table's
+ distribution carefully, most of the statements may end up targeting
+ just one Datanode, which is most effecient. In this way, Coordinators and Datanodes
+ runs transactions in parallel which scales out both read and write
+ operations.
+ </para>
+
+ <para>
+ More detailed internals
+ about <productname>Postgres-XL</productname>'s transaction
+ management will be found in <xref linkend="overview">.
+ </para>
+ </sect1>
+<!## end>
</chapter>
diff --git a/doc-xc/src/sgml/nls.sgmlin b/doc-xc/src/sgml/nls.sgmlin
index 2474b87c63..05ae697604 100644
--- a/doc-xc/src/sgml/nls.sgmlin
+++ b/doc-xc/src/sgml/nls.sgmlin
@@ -21,6 +21,9 @@
<!## XC>
<productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>
+<!## end>
programs (server and client) can issue their messages in
your favorite language &mdash; if the messages have been translated.
Creating and maintaining translated message sets needs the help of
@@ -31,6 +34,9 @@
<!## XC>
the <productname>Postgres-XC</> effort. You do not have to be a
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</> effort. You do not have to be a
+<!## end>
programmer at all
to do this. This section explains how to help.
</para>
@@ -330,6 +336,9 @@ msgstr "Die Datei %2$s hat %1$u Zeichen."
<!## XC>
<productname>Postgres-XC</> distribution.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> distribution.
+<!## end>
Currently, it only applies to C programs.
</para>
diff --git a/doc-xc/src/sgml/notation.sgmlin b/doc-xc/src/sgml/notation.sgmlin
index 8a18a9e24d..1b059c552d 100644
--- a/doc-xc/src/sgml/notation.sgmlin
+++ b/doc-xc/src/sgml/notation.sgmlin
@@ -47,6 +47,36 @@
&pgonly;
<!## end>
+<!## XL>
+ <para>
+ This manual is based upon SGML source file
+ of <productname>PostgreSQL</productname> documentation.
+ Because <productname>Postgres-XL</productname> is an extension
+ to <productname>PostgreSQL</productname>, they share most of the
+ feature. To specify following sections or paragraphs are common to
+ both, the following notice will be used.
+ </para>
+
+&common;
+
+ <para>
+ To specify the following sections or paragraphs are specific
+ to <productname>Postgres-XL</productname>, the following notice will
+ be used.
+ </para>
+
+&xlonly;
+
+ <para>
+ If some <productname>PostgreSQL</productname> features are missing
+ or it is not applicable to <productname>Postgres-XL</productname>
+ but important to understand the background, it will be noticed as
+ follows:
+ </para>
+
+&pgonly;
+
+<!## end>
<para>
The following conventions are used in the synopsis of a command:
@@ -75,6 +105,9 @@
<!## XC>
<productname>Postgres-XC</productname> system. These terms should not
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> system. These terms should not
+<!## end>
be interpreted too narrowly; this book does not have fixed
presumptions about system administration procedures.
</para>
diff --git a/doc-xc/src/sgml/oid2name.sgmlin b/doc-xc/src/sgml/oid2name.sgmlin
index fd5f966ea3..a490629663 100644
--- a/doc-xc/src/sgml/oid2name.sgmlin
+++ b/doc-xc/src/sgml/oid2name.sgmlin
@@ -26,8 +26,16 @@
</para>
</note>
-&xconly;
<!## XC>
+&xconly;
+ <para>
+ Please note that you can issue this command to each Datanode or
+ Coordinator. The result is the information local to Datanode or
+ Coordinator specified.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
<para>
Please note that you can issue this command to each Datanode or
Coordinator. The result is the information local to Datanode or
diff --git a/doc-xc/src/sgml/pageinspect.sgmlin b/doc-xc/src/sgml/pageinspect.sgmlin
index 762dd23d07..bec79894c6 100644
--- a/doc-xc/src/sgml/pageinspect.sgmlin
+++ b/doc-xc/src/sgml/pageinspect.sgmlin
@@ -15,8 +15,8 @@
debugging purposes. All of these functions may be used only by superusers.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Functions of this module returns information about connecting
Coordinators locally. To get information of a Datanode, you can
@@ -26,6 +26,14 @@
inconsistent.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Functions of this module returns information about connecting
+ Coordinators locally. To get information of a Datanode, you can
+ use EXECUTE DIRECT from a Coordinator.
+ </para>
+<!## end>
<sect2>
<title>Functions</title>
diff --git a/doc-xc/src/sgml/perform.sgmlin b/doc-xc/src/sgml/perform.sgmlin
index 9ffe6723dc..66b15d8bcb 100644
--- a/doc-xc/src/sgml/perform.sgmlin
+++ b/doc-xc/src/sgml/perform.sgmlin
@@ -26,6 +26,15 @@
and will be supplied in the future.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Query performance can be affected by many things. Some of these can
+ be controlled by the user, while others are fundamental to the underlying
+ design of the system. This chapter's goal is to provide some hints about understanding
+ and tuning <productname>Postgres-XL</productname> performance.
+ </para>
+<!## end>
<sect1 id="using-explain">
<title>Using <command>EXPLAIN</command></title>
@@ -44,7 +53,13 @@
This section will be supplied in the future version.
</para>
<!## end>
-<!## PG>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</productname> specific information will supplied in a future version.
+ For this version we include general <productname>PostgreSQL</productname> information.
+ </para>
+
<para>
<productname>PostgreSQL</productname> devises a <firstterm>query
plan</firstterm> for each query it receives. Choosing the right
@@ -488,7 +503,6 @@ WHERE t1.unique1 &lt; 100 AND t1.unique2 = t2.unique2;
process the table in any case, so there's no value in expending additional
page reads to look at an index.
</para>
-<!## end>
</sect1>
@@ -506,7 +520,20 @@ WHERE t1.unique1 &lt; 100 AND t1.unique2 = t2.unique2;
This section will be supplied in the future version.
</para>
<!## end>
-<!## PG>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</productname> pulls up statistics
+ from the Datanodes and stores it in each of the Coordinator's catalog
+ table to help make query planning decisions.
+ </para>
+ <para>
+ Traditional PostgreSQL costing applies, but <productname>Postgres-XL</productname>
+ also tries to take into consideration the cost of shipping rows around the
+ network for internode joins, which is an expensive operation.
+ Below general PostgreSQL handling is described.
+ </para>
+<!## end>
<para>
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
@@ -643,7 +670,6 @@ WHERE tablename = 'road';
<xref linkend="planner-stats-details">.
</para>
-<!## end>
</sect1>
<sect1 id="explicit-joins">
@@ -680,6 +706,9 @@ SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
<!## XC>
joins in the <productname>Postgres-XC</productname> executor happen
<!## end>
+<!## XL>
+ joins in the <productname>Postgres-XL</productname> executor happen
+<!## end>
between two input tables, so it's necessary to build up the result
in one or another of these fashions.) The important point is that
these different join possibilities give semantically equivalent
@@ -700,6 +729,18 @@ SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
to the Datanode to reduce the amount of rows to receive.
</para>
<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</> stores table data in a distributed or
+ replicated fashion. To leverage this, the planner tries to find
+ the best way to use as much of Datanode power as possible. If the
+ equi-join is done by distribution columns and they share the
+ distribution method (hash/modulo), the Coordinator can tell
+ the Datanode to perform join.
+ If not, it may tell Datanodes to ship rows to other Datanodes
+ and expect rows from other Datanodes to be shipped to it.
+ </para>
+<!## end>
&common;
<para>
When a query only involves two or three tables, there aren't many join
@@ -714,6 +755,9 @@ SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
<!## XC>
<productname>Postgres-XC</productname> planner will switch from exhaustive
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> planner will switch from exhaustive
+<!## end>
search to a <firstterm>genetic</firstterm> probabilistic search
through a limited number of possibilities. (The switch-over threshold is
set by the <xref linkend="guc-geqo-threshold"> run-time
@@ -761,6 +805,9 @@ SELECT * FROM a LEFT JOIN b ON (a.bid = b.id) LEFT JOIN c ON (a.cid = c.id);
<!## XC>
<productname>Postgres-XC</productname> query planner to treat all
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> query planner to treat all
+<!## end>
<literal>JOIN</> clauses as constraining the join order anyway.
For example, these three queries are logically equivalent:
<programlisting>
@@ -879,6 +926,9 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
<!## XC>
<productname>Postgres-XC</productname> is doing a lot of work for
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is doing a lot of work for
+<!## end>
each row that is added. An additional benefit of doing all
insertions in one transaction is that if the insertion of one row
were to fail then the insertion of all rows inserted up to that
@@ -1001,6 +1051,13 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
constraint.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, only the distribution column can have foreign key
+ constraint.
+ </para>
+<!## end>
</sect2>
<sect2 id="populate-checkpoint-segments">
@@ -1017,6 +1074,9 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
<!## XC>
amount of data into <productname>Postgres-XC</productname> will
<!## end>
+<!## XL>
+ amount of data into <productname>Postgres-XL</productname> will
+<!## end>
cause checkpoints to occur more often than the normal checkpoint
frequency (specified by the <varname>checkpoint_timeout</varname>
configuration variable). Whenever a checkpoint occurs, all dirty
@@ -1034,6 +1094,15 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
by <acronym>DDL</>s.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that you should tune the configuration variables in
+ all the nodes involved. Keep in mind that the Datanodes
+ are more important and will need more resources than Coordinators.
+ by <acronym>DDL</>s.
+ </para>
+<!## end>
</sect2>
<sect2 id="populate-pitr">
@@ -1045,6 +1114,11 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
Use of streaming replication will be added in the future release of <productname>Postgres-XC</>;
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ </para>
+<!## end>
<!## PG>
<para>
When loading large amounts of data into an installation that uses
@@ -1126,6 +1200,15 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
configure autovacuum for each Coordinator and Datanodes.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, a manual <command>VACUUM</> will be
+ pushed down to all the Datanodes as well.
+ Depending on your workload, if you have a highly loaded cluster,
+ you may wish to disable autovacuum and vacuum at specific times.
+ </para>
+<!## end>
</sect2>
<sect2 id="populate-pg-dump">
@@ -1242,6 +1325,9 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
<!## XC>
<productname>Postgres-XC</productname> can be configured to run
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can be configured to run
+<!## end>
much faster. The following are configuration changes you can make
to improve performance in such cases. Except as noted below, durability
is still guaranteed in case of a crash of the database software;
diff --git a/doc-xc/src/sgml/pgarchivecleanup.sgmlin b/doc-xc/src/sgml/pgarchivecleanup.sgmlin
index 9c1b65982d..e02b00df88 100644
--- a/doc-xc/src/sgml/pgarchivecleanup.sgmlin
+++ b/doc-xc/src/sgml/pgarchivecleanup.sgmlin
@@ -18,6 +18,9 @@
<!## XC>
running as a standby server.
<!## end>
+<!## XL>
+ running as a standby server.
+<!## end>
<application>pg_archivecleanup</> can also be used as a standalone program to
clean WAL file archives.
</para>
@@ -28,6 +31,12 @@
Coordinator. You should configure each of them manually.
</para>
<!## end>
+<!## XL>
+ <para>
+ Please note that this command takes care of each Datanode or
+ Coordinator. You should configure each of them manually.
+ </para>
+<!## end>
<para>
<application>pg_archivecleanup</application> features include:
@@ -67,6 +76,9 @@ archive_cleanup_command = 'pg_archivecleanup <replaceable>archivelocation</> %r'
<!## XC>
When used within archive-cleanup-command, all WAL files
<!## end>
+<!## XL>
+ When used within archive-cleanup-command, all WAL files
+<!## end>
logically preceding the value of the <literal>%r</> argument will be removed
from <replaceable>archivelocation</>. This minimizes the number of files
that need to be retained, while preserving crash-restart capability. Use of
diff --git a/doc-xc/src/sgml/pgbench.sgmlin b/doc-xc/src/sgml/pgbench.sgmlin
index 08991e7b7c..c3f031a88f 100644
--- a/doc-xc/src/sgml/pgbench.sgmlin
+++ b/doc-xc/src/sgml/pgbench.sgmlin
@@ -175,6 +175,20 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>-k</option></term>
+ <listitem>
+ <para>
+ Use column <structname>bid</> as hash distribution key for tables
+ <structname>pgbench_accounts</>, <structname>pgbench_tellers</>,
+ <structname>pgbench_branches</>. This limits the selectivity of
+ remote nodes to a single node for each transaction as all the tables
+ are distributed respecting the same key.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
</variablelist>
</para>
@@ -392,6 +406,19 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>-k</option></term>
+ <listitem>
+ <para>
+ Add an additional condition based on column <structname>bid</> based
+ on its values as a hash key to enforce selectivity of all write queries
+ to a single remote node. This functionality permits to check the
+ write-scalability performance of the system by distributing data among cluster nodes.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
</variablelist>
</para>
diff --git a/doc-xc/src/sgml/pgbuffercache.sgmlin b/doc-xc/src/sgml/pgbuffercache.sgmlin
index 28a5ccf76c..f2a516fef0 100644
--- a/doc-xc/src/sgml/pgbuffercache.sgmlin
+++ b/doc-xc/src/sgml/pgbuffercache.sgmlin
@@ -26,8 +26,16 @@
are security issues lurking.
</para>
-&xconly;
<!## XC>
+&xconly;
+ <para>
+ <filename>pg_buffercache</filename> returns information local to the
+ connecting Coordinator. To inquire information local to other node,
+ use <command>EXECUTE DIRECT</command>.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
<para>
<filename>pg_buffercache</filename> returns information local to the
connecting Coordinator. To inquire information local to other node,
diff --git a/doc-xc/src/sgml/pgfreespacemap.sgmlin b/doc-xc/src/sgml/pgfreespacemap.sgmlin
index e5bf1ac1de..b8209e989f 100644
--- a/doc-xc/src/sgml/pgfreespacemap.sgmlin
+++ b/doc-xc/src/sgml/pgfreespacemap.sgmlin
@@ -22,9 +22,9 @@
there are security issues lurking.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Functions of this module returns information about connecting
Coordinators locally. To get information of a Datanode, you can
@@ -34,6 +34,15 @@
inconsistent.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Functions of this module return information from the
+ Coordinator that the session is currently connect to.
+ To get information about a Datanode, you can
+ use <command>EXECUTE DIRECT</command>.
+ </para>
+<!## end>
<sect2>
<title>Functions</title>
diff --git a/doc-xc/src/sgml/pgnotice.sgmlin b/doc-xc/src/sgml/pgnotice.sgmlin
index c1de0a90d2..263b8196d3 100644
--- a/doc-xc/src/sgml/pgnotice.sgmlin
+++ b/doc-xc/src/sgml/pgnotice.sgmlin
@@ -6,3 +6,11 @@ and is subject to revision for Postgres-XC.
</para>
</note>
<!## end>
+<!## XL>
+<note>
+<para>
+At present, this section is just taken from PostgreSQL documentation
+and is subject to revision for Postgres-XL.
+</para>
+</note>
+<!## end>
diff --git a/doc-xc/src/sgml/pgonly.sgmlin b/doc-xc/src/sgml/pgonly.sgmlin
index 2013bd85d4..302bb0383b 100644
--- a/doc-xc/src/sgml/pgonly.sgmlin
+++ b/doc-xc/src/sgml/pgonly.sgmlin
@@ -5,3 +5,10 @@ The following description applies only to <productname>PostgreSQL</>
</para>
</note>
<!## end>
+<!## XL>
+<note>
+<para>
+The following description applies only to <productname>PostgreSQL</>
+</para>
+</note>
+<!## end>
diff --git a/doc-xc/src/sgml/pgrowlocks.sgmlin b/doc-xc/src/sgml/pgrowlocks.sgmlin
index 57cfb45e54..4f11a4a321 100644
--- a/doc-xc/src/sgml/pgrowlocks.sgmlin
+++ b/doc-xc/src/sgml/pgrowlocks.sgmlin
@@ -14,8 +14,8 @@
locking information for a specified table.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Functions of this module returns information about connecting
Coordinators locally. To get information of a Datanode, you can
@@ -25,6 +25,15 @@
inconsistent.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Functions of this module return information from the
+ Coordinator that the session is currently connect to.
+ To get information about a Datanode, you can
+ use <command>EXECUTE DIRECT</command>.
+ </para>
+<!## end>
<sect2>
<title>Overview</title>
diff --git a/doc-xc/src/sgml/pgstandby.sgmlin b/doc-xc/src/sgml/pgstandby.sgmlin
index 216d2fb42b..4f86f5b487 100644
--- a/doc-xc/src/sgml/pgstandby.sgmlin
+++ b/doc-xc/src/sgml/pgstandby.sgmlin
@@ -26,6 +26,9 @@
<!## XC>
server manual.
<!## end>
+<!## XL>
+ server manual.
+<!## end>
</para>
<para>
@@ -207,6 +210,9 @@ pg_standby <optional> <replaceable>option</> ... </optional> <replaceable>archiv
<!## XC>
recommended.
<!## end>
+<!## XL>
+ recommended.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -238,6 +244,9 @@ pg_standby <optional> <replaceable>option</> ... </optional> <replaceable>archiv
<!## XC>
The default setting is not necessarily recommended.
<!## end>
+<!## XL>
+ The default setting is not necessarily recommended.
+<!## end>
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/pgstatstatements.sgmlin b/doc-xc/src/sgml/pgstatstatements.sgmlin
index 5411520dfe..c7d5614e02 100644
--- a/doc-xc/src/sgml/pgstatstatements.sgmlin
+++ b/doc-xc/src/sgml/pgstatstatements.sgmlin
@@ -14,6 +14,13 @@
correctly with <productname>Postgres-XC</productname>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The module <filename>pg_stat_statments</filename> does not work
+ correctly with <productname>Postgres-XL</productname>.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/pgstattuple.sgmlin b/doc-xc/src/sgml/pgstattuple.sgmlin
index e930b73ded..7f534d9436 100644
--- a/doc-xc/src/sgml/pgstattuple.sgmlin
+++ b/doc-xc/src/sgml/pgstattuple.sgmlin
@@ -14,8 +14,8 @@
obtain tuple-level statistics.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Functions of this module returns information about connecting
Coordinators locally. To get information of a Datanode, you can
@@ -25,6 +25,15 @@
inconsistent.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Functions of this module return information from the
+ Coordinator that the session is currently connect to.
+ To get information about a Datanode, you can
+ use <command>EXECUTE DIRECT</command>.
+ </para>
+<!## end>
<sect2>
diff --git a/doc-xc/src/sgml/pgupgrade.sgmlin b/doc-xc/src/sgml/pgupgrade.sgmlin
index 060c1708d0..5a93fbd219 100644
--- a/doc-xc/src/sgml/pgupgrade.sgmlin
+++ b/doc-xc/src/sgml/pgupgrade.sgmlin
@@ -7,14 +7,22 @@
<primary>pg_upgrade</primary>
</indexterm>
-&xconly;
<!## XC>
+&xconly;
<para>
<application>pg_updrade</> is not compatible
with <productname>Postgres-XC</> due to the difference of internal
catalog.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <application>pg_updrade</> is not compatible
+ with <productname>Postgres-XL</> due to the difference of internal
+ catalog.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin b/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin
new file mode 100644
index 0000000000..1df2feca52
--- /dev/null
+++ b/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin
@@ -0,0 +1,1851 @@
+<!--
+doc/src/sgml/ref/pgxc_ctl-ref.sgml
+PostgreSQL documentation
+-->
+
+<sect1 id="pgxc-ctl" xreflabel="pgxc-ctl">
+
+<title>pgxc_ctl</title>
+
+<indexterm zone="pgxc-ctl">
+ <primary>pgxc_ctl</primary>
+</indexterm>
+
+ <sect2>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ The manual configuration of the individual components of a Postgres-XL cluster
+ can be cumbersome and error prone.
+ The Postgres-XL Cluster Control utility, <application>pgxc_ctl</application>, simplifies this by allowing for the configuration,
+ initialization, starting, stoping, monitoring and failover of Postgres-XL
+ components.
+ This section describes how to use
+ <application>pgxc_ctl</application>.
+ </para>
+ </sect2>
+
+ <sect2 id="R1-APP-PGXC-CTL-1">
+ <title>Building and installing pgxc_ctl</title>
+
+ <para>
+ You should build pgxc_ctl using your Postgres-XL build environment.
+ <application>pgxc_ctl</application> source code comes with Postgres-XL source code tarball.
+ The latest version of the source code will be available at its home repository,
+<programlisting>
+http:// pgxc_ctl
+</programlisting>
+ If you would like to use the latest version from pgxc_ctl home repository,
+ get the source code tarball and expand it in the source's contrib
+ directory of your Postgres-XL build environment.
+ If you are using pgxc_ctl in Postgres-XL tarball, you don't have to do this.
+ </para>
+
+ <para>
+ Before building pgxc_ctl, you should build Postgres-XL binary, like
+<programlisting>
+$ cd <replaceable>your Postgres-XL build directory</replaceable>
+$ ./configure <replaceable>your configuration option</replaceable>
+$ make
+</programlisting>
+
+ Please note that you dont'have to install the
+ <application>Postgres-XL</application> binary to build
+ <application>pgxc_ctl</application>.
+ Also please note that <application>Postgres-XL</application> top
+ level make and make install command does not take care of pgxc_ctl.
+ You should build and install the separately.
+ </para>
+
+ <para>
+ Then you can build pgxc_ctl as follows:
+<programlisting>
+$ cd contrib/pgxc_ctl
+$ make
+$ make install
+</programlisting>
+ The <application>pgxc_ctl</application> binary will be installed in the
+ same directory as <application>Postgres-XL</application> binaries.
+ </para>
+
+ <para>
+ <application>Postgres-XL</application> consists of many components
+ (or called "nodes") running in various physical or virtual
+ machines.
+ Because pgxc_ctl relies on ssh connections between the machines where
+ <application>pgxc_ctl</application> and other nodes are running,
+ you should setup ssh-agent authentication to avoid typing password
+ each time pgcx_ctl issues ssh.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>pgxc_ctl home directory</title>
+
+ <para>
+ <application>pgxc_ctl</application> uses its own work directory,
+ where it stores configuration files and logs, as well as other
+ resources.
+ The default value is <literal>$HOME/pgxc_ctl</literal> and you can
+ specify this by the <literal>--home</literal> option.
+ </para>
+
+ <para>
+ The <application>pgxc_ctl</application> home directory may be referred
+ to as <literal>$PGXC_CTL_HOME</literal> through this manual.
+ </para>
+
+ <para>
+ You do not have to create this directory manually.
+ <application>Pgxc_ctl</application> will create the directory when
+ it is invoked for the first time.
+ Please note that you need appropriate privilege to create
+ <literal>$PGXC_CTL_HOME</literal>.
+ You can create this manually, of course.
+
+ For details, please refer to later sections.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>pgxc_ctl configuration file</title>
+
+ <para>
+ pgxc_ctl uses configuration file.
+ The default name and the location is
+ <literal>$PGXC_CTL_HOME/pgxc_ctl.conf</literal>.
+ When you change Postgres-XL cluster configuration using pgxc_ctl
+ commands, this file will bel updated.
+ Depending upon your configuration,
+ <application>pgxc_ctl</application> will back up this file
+ according to your configuration.
+ </para>
+
+ <para>
+ <application>pgxc_ctl</application> provides the command "prepare" to
+ setup the prototype of this file.
+ For details, please refer to command syntax of
+ <application>pgxc_ctl</application>.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>pgxc_ctl initialization file</title>
+
+ <para>
+ You can specify your preferred parameters of pgxc_ctl behavior.
+ You can specify parameters in <literal>/etc/pgxc_ctl</literal>
+ and/or <literal>$HOME/.pgxc_ctl</literal> file.
+ Setups in <literal>$HOME/.pgxc_ctl</literal> have higher priority
+ so you can specify system-wide setups at
+ <literal>/etc/pgxc_ctl</literal> and then your personal preferences
+ in <literal>$HOME/.pgxc_ctl</literal>.
+ </para>
+
+ <para>
+ The format of this file will be described in a later section.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Running pgxc_ctl for the first time</title>
+
+ <para>
+ Unless you build $PGXC_CTL_HOME and the configuration file from the
+ scratch, you should run pgxc_ctl to build your $PGXC_CTL_HOME and
+ get a prototype of configuration file.
+ From your shell prompt, simply type
+ <application>pgxc_ctl</application>.
+ You will have the following prompt:
+<programlisting>
+$ pgxc_ctl
+PGXC$
+</programlisting>
+ You will get the default prompt, which you can modify at any time
+ through initialization files.
+ </para>
+
+ <para>
+ Try to type <literal>pwd</literal>.
+ You will see what your <literal>$PGXC_CTL_HOME</literal> is.
+<programlisting>
+$ pgxc_ctl
+PGXC$ pwd
+/home/postgres-xl/pgxc_ctl
+PGXC$
+</programlisting>
+ If you specify <option>--home</option> option with another
+ directory, <application>pgxc_ctl</application> will start at this
+ directory, after building it if needed.
+<programlisting>
+$ pgxc_ctl --home /home/postgres-xl/my_pgxc_ctl
+PGXC$ pwd
+/home/postgres-xl/my_pgxc_ctl
+PGXC$
+</programlisting>
+ You can specify your pgxc_ctl_home as environment variable
+ <literal>PGXC_CTL_HOME</literal>, or you can specify this as
+ variable <literal>pgxc_ctl_home</literal> in your initialization
+ files.
+ </para>
+
+ <para>
+ The command line option has the highest priority, then the environment,
+ <literal>$HOME/.pgxc_ctl</literal> and
+ <literal>/etc/pgxc_ctl</literal>.
+ </para>
+
+ <para>
+ Type prepare or prepare config to get a configuration template file
+ <filename>pgxc_ctl.conf</filename> at
+ <literal>$PGXC_CTL_HOME</literal>.
+ You may add file name as an option to get configuration template in
+ your favorite file. For example:
+<programlisting>
+PGXC$ prepare
+PGXC$
+</programlisting>
+or
+<programlisting>
+PGXC$ prepare config my_pgxc.conf
+PGXC$
+</programlisting>
+ A more detailed syntax of the command will be described in a later section.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Make your configuration</title>
+
+ <para>
+ Please take a look at the template of the configuration file you
+ created in the previous section.
+ This file is actually a bash script file to setup various bash
+ script variables which are passed to pgxc_ctl next time you run
+ it.
+ </para>
+
+ <para>
+ The <application>Postgres-XL</application> configuration needs to
+ specify same or similar values to each node configuration, for
+ example, work directory, port, etc.
+ To avoid trivial errors, you can specify the same value as defaults
+ for variables and refer to them later in each variable setups.
+ </para>
+
+ <para>
+ For example, a part of your template may look like this:
+<programlisting>
+#---- Shortcuts ------
+gtmProxyDir=$HOME/pgxc/nodes/gtm_pxy
+
+#---- Overall -------
+gtmProxy=y # Specify y if you configure at least one GTM
+ # proxy.
+ # You may not configure gtm proxies only when
+ # you dont' configure GTM slaves.
+ # If you specify this value not to y, the
+ # following parameters will be set to default
+ # empty values.
+ # If we find there're no valid Proxy server
+ # names (means, every servers are specified
+ # as none), then gtmProxy value will be set to
+ # "n" and all the entries will be set to empty
+ # values.
+gtmProxyNames=(gtm_pxy1 gtm_pxy2 gtm_pxy3 gtm_pxy4) # No used if it is not configured
+gtmProxyServers=(node06 node07 node08 node09) # Specify none if you dont' configure it.
+gtmProxyPorts=(20001 20001 20001 20001) # Not used if it is not configured.
+gtmProxyDirs=($gtmProxyDir $gtmProxyDir $gtmProxyDir $gtmProxyDir) # Not used if it is not configured.
+</programlisting>
+ This section specifies the gtm proxy configuration.
+ We have four <literal>gtm proxies</literal> in each of the server.
+ They share working directory path and is specified as a shortcut
+ which is referred to later.
+ </para>
+
+ <para>
+ You can do all these in any part of the configuration file.
+ </para>
+
+ <para>
+ Please note that the working directory of this script is
+ <filename>$PGXC_CTL_HOME</filename>, unless you change it explicitly
+ in this configuration file.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>pgxc_ctl invocation options</title>
+
+ <para>
+ When you invoke pgxc_cmd from your shell,
+ <application>pgxc_ctl</application> accepts several options to
+ control its behavior.
+ <application>pgxc_ctl</application> command format is as follows:
+<programlisting>
+pgxc [options ... ] [pgxc_command]
+</programlisting>
+ </para>
+
+ <para>
+ Options are as follows:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-c <replaceable class="parameter">configuration_file</replaceable></></term>
+ <term><option>--configuration <replaceable class="parameter">configuration_file</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies configuration file.
+ The default is <filename>pgxc_ctl_conf</filename>, or the value
+ of <literal>configFile</literal> option
+ found in the initialization file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--home <replaceable class="parameter">home_directory</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies <filename>$PGXC_CTL_HOME</filename> directory.
+ You can specify this as <literal>pgxc_ctl_home</literal>
+ variable in the initialization file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-i <replaceable class="parameter">file</replaceable></></term>
+ <term><option>--infile <replaceable class="parameter">file</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies where to read pgxc_ctl commands.
+ There's not corresponding variables in the initialization file.
+ Default is the standard input.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-L <replaceable class="parameter">logfile</replaceable></></term>
+ <term><option>--logfile <replaceable class="parameter">logfile</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies where to write the log.
+ The path is relative to <filename>$PGXC_CTL_HOME</filename> or
+ the value of log directory specified as <option>-l</option>
+ option or <literal>logDir</literal> variable in the
+ initialization file, if specified.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-l <replaceable class="parameter">logdir</replaceable></option></term>
+ <term><option>--logdir <replaceable class="parameter">logdir</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies the directory of the log file.
+ Default is <filename>$PGXC_HOME/pgxc_log/</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-o <replaceable class="parameter">outfile</replaceable></option></term>
+ <term><option>--out-file <replaceable class="parameter">outfile</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies where to write <application>pgxc_ctl</application> output.
+ Default is the standard output.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--silent</option></term>
+ <listitem>
+ <para>
+ Specifies to run <application>pgxc_ctl</application> without
+ printing messages as much as possible.
+ This value can also be set as variable
+ <literal>verbose</literal> in the initialization file.
+ You can setup level of messages <literal>logMessage</literal>
+ and <literal>printMessage</literal> variables in the
+ initialization file as well.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-V</option></term>
+ <term><option>--version</option></term>
+ <listitem>
+ <para>
+ Prints <application>pgxc_ctl</application> version and exits.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-v</option></term>
+ <term><option>--verbose</option></term>
+ <listitem>
+ <para>
+ Specifies to run pgxc_ctl to print as many messages as
+ possible.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+
+
+ <sect2>
+ <title>pgxc_ctl initialization file</title>
+
+ <para>
+ As described in previous sections, pgxc_ctl behavior, as specified
+ in the command line options, can be specified in advance in the
+ initialization file <filename>/etc/pgxc_ctl</filename> or
+ <filename>$HOME/.pgxc_ctl</filename>.
+ </para>
+ <para>
+ The syntax is as follows:
+<programlisting>
+name value [ value ... ] # comment
+</programlisting>
+ </para>
+ <para>
+ Blank lines or lines beginning with '#' are simply ignored. If
+ you'd like to include space or tab in the variable name, enclose
+ the name with <literal>'...'</literal> or <literal>"..."</literal>.
+ </para>
+ <para>
+ Please note that this file is not a bash script.
+ </para>
+ <para>
+ List of the name and their value is as follows:
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>configFile <replaceable>filename</replaceable></option></term>
+ <listitem>
+ <para>
+ Specify the configuration file name.
+ Default is <filename>pgxc_ctl.conf</filename>.
+ This option can be overridden by <option>-c</option> command
+ line option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>localTmpDir <replaceable>dirname</replaceable></option></term>
+ <listitem>
+ <para>
+ Specify remote temporary directory, default is <filename>/tmp</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>logDir <replaceable>dirname</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the directory to write log. Can be overridden by
+ <option>-l</option> command line option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>logFile <replaceable>filename</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the log file name, which is relative to
+ <filename>$PGXC_CTL_HOME/pgxc_log</filename> or value of
+ <literal>logDir</literal> variable.
+ Can be overridden by <option>-L,</option> command line option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>logMessage <replaceable>msglevel</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the message level to print to the terminal or output
+ file.
+ Valid value is <literal>MANDATORY</literal>,
+ <literal>PANIC</literal>, <literal>ERROR</literal>,
+ <literal>WARNING</literal>, <literal>NOTICE</literal>,
+ <literal>NOTICE2</literal>, <literal>INFO</literal>,
+ <literal>DEBUG1</literal>, <literal>DEBUG2</literal>, or
+ <literal>DEBUG3</literal>. Default is
+ <literal>NOTICE</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>pgxc_ctl_home <replaceable>dirname</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies <filename>$PGXC_CTL_HOME</filename>.
+ Default is <filename>$HOME/pgxc_ctl</filename> or environment
+ variable <literal>$PGXC_CTL_HOME</literal>.
+ Can be overriden by <option>--home</option> command line option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>printMessage <replaceable>msglevel</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the message level to print to the log file.
+ Valid value is <literal>MANDATORY</literal>,
+ <literal>PANIC</literal>, <literal>ERROR</literal>,
+ <literal>WARNING</literal>, <literal>NOTICE</literal>,
+ <literal>NOTICE2</literal>, <literal>INFO</literal>,
+ <literal>DEBUG1</literal>, <literal>DEBUG2</literal>, or
+ <literal>DEBUG3</literal>. Default is
+ <literal>NOTICE</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>tmpDir <replaceable>dirname</replaceable></option></term>
+ <listitem>
+ <para>
+ Specify local temporary directory, default is <filename>/tmp</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>verbose <replaceable>value</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies verbose message output from
+ <application>pgxc_ctl</application>.
+ Value should be <literal>y</literal> or <literal>n</literal>.
+ Can be overridedn by <option>-v</option> or
+ <option>--silent</option> command line option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>xc_prompt <replaceable>prompt</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies pgxc_prompt. Default is <literal>'PGXC$ '</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ <para>
+ Typical example of this initialization file will be as follows:
+<programlisting>
+$ cat ~/.pgxc_ctl
+xc_prompt 'PGXC$ '
+verbose y
+logMessage 'DEBUG3'
+printMessage 'DEBUG1'
+printLocation y
+$
+</programlisting>
+
+ </para>
+
+ </sect2>
+
+
+ <sect2>
+ <title>Postgres-XL basics and its resources</title>
+
+ <sect3 id="R2-APP-PGXC-CTL-configuration">
+ <title>Postgres-XL components</title>
+
+ <para>
+ Postgres-XL consists of the following components. Each component may
+ be called <option>node</option>, which may not necessarily refer
+ to physical or virtual server because you can configure more
+ than one node to one physical/virtual server.
+ You should consider how many of them to configure.
+ Hereafter, we call such physical/virtual server as
+ <option>host</option>.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>GTM</term>
+ <listitem>
+ <para>
+ GTM stands for global transaction manager.
+ You must have one in the cluster.
+ For production, GTM should be configured in a separate server.
+ GTM can have a slave which can fail over when GTM fails.
+ GTM slave can be installed (hopefully) in a separate server but
+ can be installed in one of the others where you have gtm_proxy,
+ coordinators and datanodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>GTM-Proxy</term>
+ <listitem>
+ <para>
+ GTM proxy reduces the communication load between coordinator and
+ GTM and helps GTM failover.
+ You should configure one gtm_proxy in each server where you have
+ coordinator or datanode as described below.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Coordinator</term>
+ <listitem>
+ <para>
+ Coordinator handles application connection and statement
+ handling.
+ For simplicity and load balancing, it is a good idea to
+ install coordinator to each server other than where GTM (and GTM
+ slave) are configured. Coordinator can have a slave. Slave can
+ be configured in one of the servers where other coordinator
+ master is installed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Datanode</term>
+ <listitem>
+ <para>
+ Datanode stores the data and run local SQL statement supplied by
+ a coordinator. Datanode should also be configured in all the
+ servers except those for GTM (and GTM slave).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect3>
+
+ <sect3>
+ <title>Common resource assignment and configuration practice</title>
+ <para>
+ Each component requires the following resources:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ hostname, IP address or host name you can refer through DNS,
+ <filename>/etc/hosts</filename> or by equivalent means.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ port
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ work directory
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ Also, coordinator needs additional port for connection pooling to
+ other nodes.
+ </para>
+
+ <para>
+ In the same host, you must not assign the same port and the same
+ work directory to nodes.
+ <application>pgxc_ctl</application> checks this.
+ </para>
+
+ <para>
+ When assign the port, you should be careful not to assign already
+ assigned one to other service.
+ </para>
+
+ <para>
+ Also, please note the following:
+ <itemizedlist>
+ <listitem>
+ <para>
+ You should not assign the same port to GTM master and GTM
+ slave.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Coordinator master and coordinator slave must share the same
+ port, at different hosts.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Datanode master and datanode slave must share the same port, at
+ different hosts.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ Please note that the last two are not required by
+ <application>Postgres-XL</application> but requirement of
+ <application>pgxc_ctl</application>.
+ </para>
+
+ <para>
+ GTM, coordinators and datanodes can configure their slave.
+ <application>Pgxc_ctl</application> does not support cascaded
+ slave or more than one slave for coordinator and datanode.
+ It is not a restriction of <application>postgres-XL</application>,
+ it is a restriction of <application>pgxc_ctl</application>.
+ </para>
+
+ <para>
+ At present, coordinator and datanode slaves are connected using
+ synchronous replication in pgxc_ctl.
+ This is not a <application>Posgres-XL</application> restriction
+ either.
+ In the future, asynchronous, cascaded and multiple slaves may be
+ supported.
+ </para>
+
+ </sect3>
+
+ </sect2>
+ <sect2>
+ <title>Configuration</title>
+
+ <para>
+ As described in the previous section, you can configure your
+ <application>Postgres-XL</application> cluster by editing
+ <filename>pgxc_ctl.conf</filename> or other configuration files
+ manually.
+ But editing the file from the scratch can be a mess.
+ It is much better to have separate configuration file.
+ You can create configuration file template by typing
+
+<programlisting>
+PGXC$ prepare config
+PGXC$
+</programlisting>
+ </para>
+
+ <para>
+ You have your <filename>pgxc_ctl.conf</filename> file at
+ <filename>$HOME/pgxc_ctl</filename>.
+ You can edit it to configure your
+ <application>Postgres-XL</application> cluster.
+ When it messes up, you can again create the template with
+ <command>prepare config</command> command.
+ If you want to use other file name, specify the names
+ <command>prepare config</command> command option like:
+
+<programlisting>
+PGXC$ prepare config my_config.conf
+</programlisting>
+ </para>
+ <para>
+ Then you can edit this file to configure you
+ <application>postgres-XL</application> cluster.
+ This file is actually a bash script file defining many variables
+ to define the cluster configuration.
+ With template values and comments, it will be easy to understand
+ what they mean.
+ The following describes each variable in the order you find in the
+ configuration template.
+ </para>
+
+ <sect3>
+ <title>Overall</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>configBackup</option></term>
+ <listitem>
+ <para>
+ Option if you backup the configuration file to a remote
+ server. Specify <literal>y</literal> if you'd like to backup the
+ configuration file. <literal>n</literal> otherwise.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>configBackupFile</option></term>
+ <listitem>
+ <para>
+ Name of the configuration backup file.
+ Effective when configuration file backup is enabled.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>configBackupHost</option></term>
+ <listitem>
+ <para>
+ Host name (or IP address) where you backup the
+ configuration file. Effective when configuration file
+ backup is enabled.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>localTmpDir</option></term>
+ <listitem>
+ <para>
+ Local directory used by pgxc_ctl itself.
+ You need full access to this directory.
+ </para>
+ <para>
+ This parameter was left here to make it compatible with
+ bash-version.
+ It is recommended to configure this parameter in
+ initialization file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>pgxcInstallDir</option></term>
+ <listitem>
+ <para>
+ <application>Postgres-XL</application> should at least be
+ installed in the server you are running
+ <application>pgxc_ctl</application>.
+ This variable specifies this installation directory, as you
+ specify with <option>--prefix=</option> option of configure
+ command when you build it.
+ All the installation will be copied to the same directory at
+ each servers and you should give appropriate privilege to this
+ directory in advance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>pgxcOwner</option></term>
+ <listitem>
+ <para>
+ Name of the database user who owns whole
+ <application>Postgres-XL</application> database.
+ This can be different from $pgxcUser.
+ In the present version, we assume these two should be the same
+ though.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>pgxcUser</option></term>
+ <listitem>
+ <para>
+ Name of the operating system user you are logging in as
+ Postgres-XL owner. At present, this should be the same as
+ <literal>$pgxcOwner</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>tmpDir</option></term>
+ <listitem>
+ <para>
+ Directory used for work at each server except for the one
+ pgxc_ctl runs. You need full access to this directory at
+ all the servers.
+ </para>
+ <para>
+ This parameter was left here to make it compatible with
+ bash-version.
+ It is recommended to configure this parameter in
+ initialization file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3>
+ <title>GTM</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>gtmName</option></term>
+ <listitem>
+ <para>
+ Node name of GTM.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you'd like to add specific configuration to both GTM master
+ and slave, specify the file which contains such lines for
+ gtm.config file.
+ Otherwise, specify <literal>none</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmMasterDir</option></term>
+ <listitem>
+ <para>
+ Work directory for GTM master.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmMasterPort</option></term>
+ <listitem>
+ <para>
+ Listening port number of GTM master.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmMasterServer</option></term>
+ <listitem>
+ <para>
+ Host name where GTM master runs.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmMasterSpecificExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you'd like to add specific configuration only to GTM
+ master, specify the file which contains such lines for
+ <filename>gtm.config</filename> file.
+ Otherwise, specify <literal>none</literal>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmSlave</option></term>
+ <listitem>
+ <para>
+ Option to enable GTM slave.
+ Specify <literal>y</literal> to enable, <literal>n</literal>
+ otherwise.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmSlaveDir</option></term>
+ <listitem>
+ <para>
+ Work directory for GTM slave.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmSlavePort</option></term>
+ <listitem>
+ <para>
+ Listening port number of GTM slave.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmSlaveServer</option></term>
+ <listitem>
+ <para>
+ Host name where GTM slave runs. Effective only when GTM slave is effective.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmSlaveSpecificExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you'd like to add specific configuration only to GTM slave,
+ specify the file which contains such lines for
+ <filename>gtm.config</filename> file.
+ Otherwise, specify <literal>none</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3>
+ <title>GTM Proxy</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>gtmProxy</option></term>
+ <listitem>
+ <para>
+ This specifies if you configure any GTM proxy in your
+ <application>Postgres-XL</application> cluster.
+ Specify the value <literal>y</literal> if you configure gtm
+ proxy in your <application>Postgres-XL</application> cluster.
+ Otherwise specify <literal>n</literal>.
+ If you specify <literal>n</literal>, all the other parameters
+ for gtm_proxy will be ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmProxyDir</option></term>
+ <listitem>
+ <para>
+ This is a shortcut used to assign same work directory to all
+ the GTM proxies.
+ You don't have to worry about it when you specify these values
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmProxyDirs</option></term>
+ <listitem>
+ <para>
+ Specify work directory for each GTM proxy.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmPxyExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you'd like to add configuration value to all the GTM proxy,
+ specify the file name which contains such lines for
+ <filename>gtm_proxy.conf</filename>.
+ Otherwise specify <literal>none</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmProxyNames</option></term>
+ <listitem>
+ <para>
+ Specify unique name for each GTM proxy.
+ This is an array.
+ In the template, we have four servers for coordinator and
+ datanode and we have four gtm proxy as well.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmProxyPorts</option></term>
+ <listitem>
+ <para>
+ Specify listening port number for each GTM proxy.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmProxyServers</option></term>
+ <listitem>
+ <para>
+ Specify host name where each of the GTM Proxy runs.
+ Specify server name as the same order as <literal>$gtmProxyNames</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>gtmPxySpecificExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you'd like to add specific configuration value to each GTM
+ proxy, specify file names with such lines for
+ <filename>gtm_proxy.conf</filename>.
+ Otherwise specify <literal>none</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3>
+ <title>Coordinators</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>coordArchLogDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same WAL archive directory to all the
+ coordinator slaves.
+ Not needed if you specify these manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordArchLogDirs</option></term>
+ <listitem>
+ <para>
+ Array of WAL archive log directory for each datanode slave.
+ If you don't configure coordinator slaves and specify
+ coordSlave variable value to <literal>n</literal>, you don't
+ have to worry about this variable.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you would like to add extra configuration value for all the
+ coordinators, specify the file name containing such lines for
+ <filename>postgresql.conf</filename>.
+ Specify <literal>none</literal> otherwise.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordExtraPgHba</option></term>
+ <listitem>
+ <para>
+ File name which contains entries of
+ <filename>pg_hba.conf</filename> file for all the
+ coordinators.
+ Specify <literal>none</literal> if you do not have such file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordMasterDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same work directory to all the
+ coordinator masters.
+ Not needed if you specify these manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordMasterDirs</option></term>
+ <listitem>
+ <para>
+ Array of coordinator master work directory.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordMasterServers</option></term>
+ <listitem>
+ <para>
+ Array of the host name where each coordinator master runs.
+ Specify in the order of <option>coordNames</option> above.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordMaxWalSender</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same value to each member of
+ <option>coordMaxWalSenders</option>. Not needed if you assign the value
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordMaxWalSenders</option></term>
+ <listitem>
+ <para>
+ Array of coordinator max_wal_senders value.
+ Note that a master and the slave shares the same value of this
+ variable.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordNames</option></term>
+ <listitem>
+ <para>
+ Array to specify coordinator names.
+ Coordinator slave uses the same name as the master.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordPgHbaEntries</option></term>
+ <listitem>
+ <para>
+ Array of CIDR addresses to be added to
+ <filename>pg_hba.conf</filename>.
+ Will create pg_hba.conf file entry with
+ <option>pgxcOwner</option> user.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordPorts</option></term>
+ <listitem>
+ <para>
+ Array of the listening port number for each coordinator.
+ Please note that <application>pgxc_ctl</application> supposed that a master and its
+ slave uses the same port number.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordSlave</option></term>
+ <listitem>
+ <para>
+ Specify <literal>y</literal> if you configure coordinator
+ slave.
+ <literal>n</literal> otherwise. If you specify
+ <literal>n</literal>, then all the other variables for
+ coordinator slave will be ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordSlaveDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same work directory to all the
+ coordinator slaves. Not needed if you specify these
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordSlaveDirs</option></term>
+ <listitem>
+ <para>
+ Array of work directory for each coordinator slaves.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordSlaveServers</option></term>
+ <listitem>
+ <para>
+ Array of the hostname where slave of each
+ coordinator runs. Specify <literal>none</literal> if you don't configure the
+ slave for specific coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>coordSpecificExtraConfig</option></term>
+ <listitem>
+ <para>
+ Array of the filename which contains extra
+ configuration values for each coordinator. Specify <literal>none</literal>
+ if you don't have such file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>poolerPorts</option></term>
+ <listitem>
+ <para>
+ Array of the port number for each pooler. Pooler takes
+ care of the connection between coordinator and datanode and
+ needs separate port. Please note that a master and its
+ slave uses the same pooler port number.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3>
+ <title>Datanodes</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><option>datanodeArchLogDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same WAL archive directory
+ to all the datanode slaves. Not needed if you specify these
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeArchLogDirs</option></term>
+ <listitem>
+ <para>
+ Array of WAL archive log directory for each datanode
+ slave.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeExtraConfig</option></term>
+ <listitem>
+ <para>
+ If you would like to add extra configuration value
+ for all the datanodes, specify the file name containing
+ such lines for postgresql.conf. Specify <literal>none</literal> otherwise.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeExtraPgHba</option></term>
+ <listitem>
+ <para>
+ File name which contains entries for all the
+ datanodes' pg_hba.conf file. Specify <literal>none</literal> if you don't
+ have such file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeMasterDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same work directory to all
+ the datanode masters. Not needed if you specify these
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeMasterDirs</option></term>
+ <listitem>
+ <para>
+ Array of datanode master work directory.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeMaterServers</option></term>
+ <listitem>
+ <para>
+ Array of the host name where each datanode master runs.
+ Specify in the order of $coordNames above.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeMaxWalSender</option></term>
+ <listitem>
+ <para>
+ shortcut to assign the same value to each member of
+ datanodeMaxWalSenders. Not needed if you assign the value
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeMaxWalSenders</option></term>
+ <listitem>
+ <para>
+ Array of datanode max_wal_senders value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeNames</option></term>
+ <listitem>
+ <para>
+ Array to specify coordinator names.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodePgHbaEntries</option></term>
+ <listitem>
+ <para>
+ Array of CIDR addresses to be added to
+ pg_hba.conf. Will create pg_hba.conf file entry with
+ $pgxcOwner user.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodePorts</option></term>
+ <listitem>
+ <para>
+ Array of the listening port number for each datanode
+ (master and slave use the same port).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSlave</option></term>
+ <listitem>
+ <para>
+ Specify <literal>y</literal> if you configure datanode slaves. <literal>n</literal>
+ otherwise. If you specify <literal>n</literal>, all the other variables for
+ datanode slaves will be ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSlaveDir</option></term>
+ <listitem>
+ <para>
+ Shortcut to assign the same work directory to all
+ the datanode slaves. Not needed if you specify these
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSlaveDirs</option></term>
+ <listitem>
+ <para>
+ Array of work directory for each datanode slave.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSlaveServers</option></term>
+ <listitem>
+ <para>
+ Array of the hostname where slave of each
+ datanode runs. Specify <literal>none</literal> if you don't configure the
+ slave for specific coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSpecificExtraConfig</option></term>
+ <listitem>
+ <para>
+ Array of the filename which contains extra
+ configuration values for each datanode. Specify <literal>none</literal>
+ if you don't have such file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>datanodeSpecificExtraPgHba</option></term>
+ <listitem>
+ <para>
+ Array of file names which contain specific
+ extra pg_hba.conf entry for each datanode. Specify <literal>none</literal>
+ if you don't have such file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>primaryDataode</option></term>
+ <listitem>
+ <para>
+ Specify name of the primary node. This must be one of
+ the name in $datanodeNames. If you don't want the primary
+ node, specify <literal>N/A</literal> or <literal>none</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+
+ </sect2>
+
+ <sect2>
+
+ <title>pgxc_ctl commands</title>
+
+ <para>
+ <application>pgxc_ctl</application> command names and literal options are case-insensitive.
+ Other options are case-sensitive.
+ </para>
+
+ <para>
+ If other command is given, it will be passed to your shell.
+ When the shell stops, then the control returns to <application>pgxc_ctl</application>.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><literal>add gtm slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add gtm_proxy <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add coordinator master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">pooler</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add coordinator slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">dir</replaceable> <replaceable class="parameter">archDir</replaceable></literal></term>
+ <term><literal>add datanode master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add datanode slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">dir</replaceable> <replaceable class="parameter">archDir</replaceable></literal></term>
+ <listitem>
+ <para>
+ Add the specified node to your Postgres-XL cluster.
+ Each node need host name and its work directory. gtm slave,
+ gtm_proxy, coordinator master and datanode master need its own port
+ to listen to. Coordinator needs its pooler port to pool
+ connections to datanodes. Coordinator and datanode slave need a
+ directory to receive WAL segments from their master.
+ </para>
+ <para>
+ When you add coordinator and datanode master, node information at
+ all the coordinators will be updated with the new one and gtm_proxy
+ will be selected automatically based upon where the new node runs.
+ </para>
+ <para>
+ You cannot add slaves without master.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>Createdb [ - <replaceable class="parameter">coordinator</replaceable> ] <replaceable class="parameter"> createdb_option ... </replaceable></literal></term>
+ <listitem>
+ <para>
+ Invokes createdb utility to create a new datanode using specified
+ coordinator. If no coordinator is specified, pgxc_ctl chooses one
+ of the available ones.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>Createuser[ - <replaceable class="parameter">coordinator</replaceable> ] <replaceable class="parameter"> createuser_option ... </replaceable></literal></term>
+ <listitem>
+ <para>
+ Invokes createuser utility to create a new user using specified
+ coordinator. Of coordinator is not specified, <application>pgxc_ctl</application> chooses
+ one of the available ones.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>deploy [ all | <replaceable class="parameter">host ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Deploys Postgres-XL binaries and other installation material to
+ specified hosts. If "all" is specified, they will be deployed to
+ all the hosts found in the configuration file. If list of the host
+ is specifies, deployment will be done to all the specified hosts,
+ regardless if they are found in the configuration file or not.
+ Target directory is taken from the variable <option>pgxcInstallDir</option>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>failover [ gtm | coordinator <replaceable class="parameter">nodename</replaceable> | datanode <replaceable class="parameter">nodename</replaceable> | <replaceable class="parameter">nodename</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Failover specified node to its master.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>init all</literal></term>
+ <term><literal>init <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>init gtm [ master | slave | all ]</literal></term>
+ <term><literal>init gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>init coordinator <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>init coordinator [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>init datanode <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>init datanode [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Initializes specified nodes.
+ </para>
+ <para>
+ At initialization, all the working directories of each component
+ will be created if it does not exist. If it does, then all the
+ contents under the working directory will be removed.
+ </para>
+ <para>
+ When "all" option is specified, then node information at each
+ coordinator will be set up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>kill all</literal></term>
+ <term><literal>kill <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>kill gtm [ master | slave | all ]</literal></term>
+ <term><literal>kill gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>kill coordinator <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>kill coordinator [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>kill datanode <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>kill datanode [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Kills specified node. If nodename is specified and it has both
+ master and slave, then both master and slave will be chosen.
+ </para>
+ <para>
+ When killing components, their ports will be cleaned too.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>log [ variable | var ] <replaceable class="parameter">varname</replaceable></literal></term>
+ <term><literal>log [ message | msg ] <replaceable class="parameter">message_body</replaceable></literal></term>
+ <listitem>
+ <para>
+ Prints the specified contents to the log file.
+ variable or var option writes specified variable name and its
+ value.
+ message or msg option writes specified message.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>monitor all</literal></term>
+ <term><literal>monitor <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>monitor gtm [ master | slave | all ]</literal></term>
+ <term><literal>monitor gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>monitor coordinator <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>monitor coordinator [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>monitor datanode <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>monitor datanode [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Monitors if specified nodes are running.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>prepare [ <replaceable class="parameter">path</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Write pgxc_ctl configuration file template to the specified file.
+ If path option is not specified, target file will be default
+ configuration file, or the file specified by configFile option in
+ <filename>/etc/pgxc_ctl</filename> or <filename>~/.pgxc_ctl</filename>. If you specify relative path, it
+ will be against <filename>pgxc_ctl_home</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>Psql [ - <replaceable class="parameter">coordinator</replaceable> ] <replaceable class="parameter"> psql_option ... </replaceable></literal></term>
+ <term><literal></literal></term>
+ <listitem>
+ <para>
+ Invokes psql targetted to specified coordinator. If no
+ coordinator is specifies, <application>pgxc_ctl</application> will choose one of the available
+ ones.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>q | quit | exit</literal></term>
+ <listitem>
+ <para>
+ Exits pgxc_ctl. This command has no option.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>reconnect gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Reconnects specified gtm_proxy to new gtm. This is needed after
+ you failover gtm to its slave.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>remove gtm slave</literal></term>
+ <term><literal>remove gtm_proxy <replaceable class="parameter">nodename</replaceable> [ clean ]</literal></term>
+ <term><literal>remove coordinator [ master| slave ] <replaceable class="parameter">nodename</replaceable> [ clean ]</literal></term>
+ <term><literal>remove datanode [ master| slave ] <replaceable class="parameter">nodename</replaceable> [ clean ]</literal></term>
+ <listitem>
+ <para>
+ Removes the specified node from the cluster.
+ If clean option is specified, then the work directory and listening socket will be cleared.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>set <replaceable class="parameter">varname value ...</replaceable></literal></term>
+ <listitem>
+ <para>
+ Set variable value. You can specify multiple values to a
+ variable. In this case simply specify these values as separated
+ value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>show [ variable | var ] [ all | <replaceable class="parameter">varname ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Displays configuration or variable name and its value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>start all</literal></term>
+ <term><literal>start <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>start gtm [ master | slave | all ]</literal></term>
+ <term><literal>start gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>start coordinator <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>start coordinator [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>start datanode <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>start datanode [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <listitem>
+ <para>
+ Starts specified node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>stop all</literal></term>
+ <term><literal>stop <replaceable class="parameter">nodename ...</replaceable></literal></term>
+ <term><literal>stop gtm [ master | slave | all ]</literal></term>
+ <term><literal>stop gtm_proxy [ all | <replaceable class="parameter">nodename ...</replaceable> ]</literal></term>
+ <term><literal>stop coordinator <replaceable class="parameter">nodename ...</replaceable> [ -m [ smart | fast | immediate ] </literal></term>
+ <term><literal>stop coordinator [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ] [ -m [ smart | fast | immediate ] </literal></term>
+ <term><literal>stop datanode <replaceable class="parameter">nodename ...</replaceable> [ -m [ smart | fast | immediate ] </literal></term>
+ <term><literal>stop datanode [ master | slave ] [ all | <replaceable class="parameter">nodename ...</replaceable> ] [ -m [ smart | fast | immediate ] </literal></term>
+ <listitem>
+ <para>
+ Stops specified node. For datanode and coordinator, you can
+ specify stop mode as in "pg_ctl stop" command.
+ </para>
+ <para>
+ When you stop coordinator or datanode slave, the master will be
+ reconfigured to remove synchronous replication.
+ </para>
+ <para>
+ When you stop coordinator or datanode slave, the master will be
+ reconfigurated to remove synchronous replication.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>unregister <replaceable class="parameter">unregister_option ...</replaceable></literal></term>
+ <listitem>
+ <para>
+ Unregisteres specified node from the gtm. This could be needed
+ when some node crashes and would like to start new one.
+
+ </para>
+ <para>
+ unregister_option is one of the following:
+
+ </para>
+ <para>
+ <option>-n</option> <replaceable class="parameter">name</replaceable>: Specifies node name to unregister.
+ </para>
+ <para>
+ <option>-Z</option> <literal>{ gtm | gtm_proxy | gtm_proxy_postmaster | coordinator | datanode }</literal>:
+ Specifies the category of the specified node.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+</sect1>
diff --git a/doc-xc/src/sgml/pgxcclean.sgmlin b/doc-xc/src/sgml/pgxcclean.sgmlin
index c4c24ee87d..253b89a308 100644
--- a/doc-xc/src/sgml/pgxcclean.sgmlin
+++ b/doc-xc/src/sgml/pgxcclean.sgmlin
@@ -11,17 +11,17 @@
<sect2>
<title>Overview</title>
-&xconly;
+&xlonly;
<para>
- pgxc_clean has the following synopsis.
+ pgxc_clean has the following syntax.
<programlisting>
pgxc_clean <optional> <replaceable>option</> </optional> <optional><replaceable>dbname</><optional><replaceable>username</></optional></optional>
</programlisting>
</para>
<para>
- <application>pgxc_clean</application> is Postgres-XC utility to maintain transaction status after a crash.
- When some Postgres-XC node crashes and recovers or fails over, commit status of such node may be inconsistent
+ <application>pgxc_clean</application> is a Postgres-XL utility to maintain transaction status after a crash.
+ When a Postgres-XL node crashes and recovers or fails over, the commit status of such node may be inconsistent
with other nodes. <application>pgxc_clean</application> checks transaction commit status and corrects them.
</para>
@@ -208,4 +208,4 @@ pgxc_clean <optional> <replaceable>option</> </optional> <optional><replaceable>
</variablelist>
</sect2>
-</sect1> \ No newline at end of file
+</sect1>
diff --git a/doc-xc/src/sgml/pgxcddl.sgmlin b/doc-xc/src/sgml/pgxcddl.sgmlin
index beb45570b9..70f268c56a 100644
--- a/doc-xc/src/sgml/pgxcddl.sgmlin
+++ b/doc-xc/src/sgml/pgxcddl.sgmlin
@@ -12,11 +12,11 @@
<title>
Overview
</title>
-&xconly
+&xlonly
<para>
- pgxc_ddl is a module for Coordinator catalog table synchronization and DDL treatment module.
- It has the following synopsis.
+ pgxc_ddl is a module for Coordinator catalog table synchronization.
+ It has the following syntax.
<programlisting>
pgxc_ddl <optional> <replaceable>option</> </optional>
@@ -28,21 +28,14 @@ pgxc_ddl <optional> <replaceable>option</> </optional>
one chosen by a user. It is also possible to launch a DDL on one
Coordinator, and then to synchronize all the Coordinator catalog
tables from the catalog table of the Coordinator having received the
- DDL. Copy method is cold. All the Coordinators are stopped,
+ DDL. The copy method is "cold". All the Coordinators are stopped,
catalog files are copied, then all the Coordinators are restarted.
</para>
<para>
- Since <productname>Postgres-XC</productname> 0.9.3, DDL are
+ This utility is not really needed in <productname>Postgres-XL</productname>; DDL is
synchronized automatically on all the nodes of the
- cluster, <command>pgxc_ddl</command> is let on purpose of future
- feature development.
- </para>
-
- <para>
- Since <productname>Postgres-XC</productname> 0.9.4, pgxc_ddl and
- pgxc.conf are not anymore installed by default. Scripts are saved
- in the folder <filename>contrib/pgxc_ddl</filename>.
+ cluster.
</para>
</sect2>
diff --git a/doc-xc/src/sgml/pgxcmonitor.sgmlin b/doc-xc/src/sgml/pgxcmonitor.sgmlin
index f798f2c15b..f05fa7dfc9 100644
--- a/doc-xc/src/sgml/pgxcmonitor.sgmlin
+++ b/doc-xc/src/sgml/pgxcmonitor.sgmlin
@@ -11,7 +11,7 @@
<sect2>
<title>Overview</title>
-&xconly;
+&xlonly;
<para>
pgxc_monitor has the following synopsis.
<programlisting>
@@ -20,7 +20,7 @@ pgxc_monitor <optional> <replaceable>option</> </optional>
</para>
<para>
- <application>pgxc_monitor</application> is a <productname>Postgres-XC</> utility to test if
+ <application>pgxc_monitor</application> is a <productname>Postgres-XL</> utility to test if
the target node is running.
</para>
diff --git a/doc-xc/src/sgml/plperl.sgmlin b/doc-xc/src/sgml/plperl.sgmlin
index fff528eb58..9698cdf6b1 100644
--- a/doc-xc/src/sgml/plperl.sgmlin
+++ b/doc-xc/src/sgml/plperl.sgmlin
@@ -659,6 +659,14 @@ SELECT release_hosts_query();
future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>PREPARE</> is not supported in the current release
+ of <productname>Postgres-XL</>. This may be supported in the
+ future releases.
+ </para>
+<!## end>
</listitem>
</varlistentry>
</variablelist>
diff --git a/doc-xc/src/sgml/plpgsql.sgmlin b/doc-xc/src/sgml/plpgsql.sgmlin
index fb2404f0f1..8b489b9fba 100644
--- a/doc-xc/src/sgml/plpgsql.sgmlin
+++ b/doc-xc/src/sgml/plpgsql.sgmlin
@@ -24,6 +24,11 @@
system inherited from <productname>PostgreSQL</>. The design goals of <application>PL/pgSQL</> were to create
a loadable procedural language that
<!## end>
+<!## XL>
+ language for the <productname>Postgres-XL</productname> database
+ system inherited from <productname>PostgreSQL</>. The design goals of <application>PL/pgSQL</> were to create
+ a loadable procedural language that
+<!## end>
<itemizedlist>
<listitem>
@@ -80,6 +85,13 @@
can be handled in a function.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ At present, in <productname>Postgres-XL</>, only one SQL statment
+ can be handled in a function.
+ </para>
+<!## end>
<sect2 id="plpgsql-advantages">
<title>Advantages of Using <application>PL/pgSQL</application></title>
@@ -92,6 +104,9 @@
<!## XC>
<acronym>SQL</acronym> is the language <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <acronym>SQL</acronym> is the language <productname>Postgres-XL</>
+<!## end>
and most other relational databases use as query language. It's
portable and easy to learn. But every <acronym>SQL</acronym>
statement must be executed individually by the database server.
@@ -674,6 +689,9 @@ user_id users.user_id%TYPE;
<!## XC>
it actually does not matter in <productname>Postgres-XC</> whether you
<!## end>
+<!## XL>
+ it actually does not matter in <productname>Postgres-XL</> whether you
+<!## end>
write <literal>%ROWTYPE</literal> or not. But the form with
<literal>%ROWTYPE</literal> is more portable.)
</para>
@@ -1068,6 +1086,14 @@ DELETE ... RETURNING <replaceable>expressions</replaceable> INTO <optional>STRIC
THis feature may be supported in the future releases.
</para>
<!## end>
+<!## XL>
+ <para>
+ This paragraph originally describes internal behavior
+ of <command>SELECT INTO</> command of <productname>PostgerSQL</>,
+ which has not been supported by <productname>Postgres-XL</> yet.
+ THis feature may be supported in the future releases.
+ </para>
+<!## end>
</tip>
<para>
@@ -1280,6 +1306,9 @@ EXECUTE 'SELECT count(*) FROM '
<!## XC>
<productname>Postgres-XC</productname> server. The server's
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server. The server's
+<!## end>
<command>EXECUTE</command> statement cannot be used directly within
<application>PL/pgSQL</> functions (and is not needed).
</para>
@@ -1607,6 +1636,9 @@ END;
<!## XC>
you can manipulate <productname>Postgres-XC</> data in a very
<!## end>
+<!## XL>
+ you can manipulate <productname>Postgres-XL</> data in a very
+<!## end>
flexible and powerful way.
</para>
@@ -4231,6 +4263,9 @@ $$ LANGUAGE plpgsql;
<!## XC>
<productname>Postgres-XC</productname> main parser knows when
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> main parser knows when
+<!## end>
preparing the plan for the <command>INSERT</command> that the
string <literal>'now'</literal> should be interpreted as
<type>timestamp</type>, because the target column of
@@ -4250,6 +4285,9 @@ $$ LANGUAGE plpgsql;
<!## XC>
<productname>Postgres-XC</productname> main parser does not know
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> main parser does not know
+<!## end>
what type <literal>'now'</literal> should become and therefore
it returns a data value of type <type>text</type> containing the string
<literal>now</literal>. During the ensuing assignment
@@ -4486,6 +4524,9 @@ a_output := a_output || $$ if v_$$ || referrer_keys.kind || $$ like '$$
<!## XC>
<productname>Postgres-XC</>'s <application>PL/pgSQL</application>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s <application>PL/pgSQL</application>
+<!## end>
language and Oracle's <application>PL/SQL</application> language,
to help developers who port applications from
<!## PG>
@@ -4494,6 +4535,9 @@ a_output := a_output || $$ if v_$$ || referrer_keys.kind || $$ like '$$
<!## XC>
<trademark class="registered">Oracle</> to <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <trademark class="registered">Oracle</> to <productname>Postgres-XL</>.
+<!## end>
</para>
<para>
@@ -4529,6 +4573,9 @@ a_output := a_output || $$ if v_$$ || referrer_keys.kind || $$ like '$$
<!## XC>
In <productname>Postgres-XC</> the function body must be written as
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</> the function body must be written as
+<!## end>
a string literal. Therefore you need to use dollar quoting or escape
single quotes in the function body. (See <xref
linkend="plpgsql-quote-tips">.)
@@ -4627,6 +4674,9 @@ show errors;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
Also, <literal>IS</> becomes <literal>AS</>, and you need to
add a <literal>LANGUAGE</> clause because <application>PL/pgSQL</>
is not the only possible function language.
@@ -4641,6 +4691,9 @@ show errors;
<!## XC>
In <productname>Postgres-XC</>, the function body is considered
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</>, the function body is considered
+<!## end>
to be a string literal, so you need to use quote marks or dollar
quotes around it. This substitutes for the terminating <literal>/</>
in the Oracle approach.
@@ -4656,6 +4709,9 @@ show errors;
<!## XC>
<productname>Postgres-XC</>, and is not needed since errors are
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>, and is not needed since errors are
+<!## end>
reported automatically.
</para>
</listitem>
@@ -4670,6 +4726,9 @@ show errors;
<!## XC>
<productname>Postgres-XC</>:
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>:
+<!## end>
<programlisting>
CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name varchar,
@@ -4738,6 +4797,9 @@ show errors;
<!## XC>
Here is how this function would end up in <productname>Postgres-XC</>:
<!## end>
+<!## XL>
+ Here is how this function would end up in <productname>Postgres-XL</>:
+<!## end>
<programlisting>
CREATE OR REPLACE FUNCTION cs_update_referrer_type_proc() RETURNS void AS $func$
DECLARE
@@ -4795,6 +4857,9 @@ $func$ LANGUAGE plpgsql;
<!## XC>
<productname>Postgres-XC</> does not have a built-in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> does not have a built-in
+<!## end>
<function>instr</function> function, but you can create one
using a combination of other
functions.<indexterm><primary>instr</></indexterm> In <xref
@@ -4954,6 +5019,9 @@ show errors
<!## XC>
Procedures like this can easily be converted into <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Procedures like this can easily be converted into <productname>Postgres-XL</>
+<!## end>
functions returning <type>void</type>. This procedure in
particular is interesting because it can teach us some things:
@@ -4966,6 +5034,9 @@ show errors
<!## XC>
There is no <literal>PRAGMA</literal> statement in <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ There is no <literal>PRAGMA</literal> statement in <productname>Postgres-XL</>.
+<!## end>
</para>
</callout>
@@ -5062,6 +5133,9 @@ $$ LANGUAGE plpgsql;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
<sect3 id="plpgsql-porting-exceptions">
@@ -5124,6 +5198,9 @@ END;
<!## XC>
<productname>Postgres-XC</> gives you two function creation
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> gives you two function creation
+<!## end>
modifiers to optimize execution: <quote>volatility</> (whether
the function always returns the same result when given the same
arguments) and <quote>strictness</quote> (whether the function
diff --git a/doc-xc/src/sgml/pltcl.sgmlin b/doc-xc/src/sgml/pltcl.sgmlin
index 73fa7cd6b2..c64b9fdb41 100644
--- a/doc-xc/src/sgml/pltcl.sgmlin
+++ b/doc-xc/src/sgml/pltcl.sgmlin
@@ -21,6 +21,9 @@
<!## XC>
<productname>Postgres-XC</productname> database system inherited from <productname>PostgreSQL</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database system inherited from <productname>PostgreSQL</>
+<!## end>
that enables the <ulink url="http://www.tcl.tk/">
Tcl language</ulink> to be used to write functions and
trigger procedures.
@@ -31,6 +34,11 @@
You can use PL/Tcl in <productname>Postgres-XC</> too.
</para>
<!## end>
+<!## XL>
+ <para>
+ You can use PL/Tcl in <productname>Postgres-XL</> too.
+ </para>
+<!## end>
<!-- **** PL/Tcl overview **** -->
@@ -58,6 +66,9 @@
<!## XC>
<productname>Postgres-XC</productname> server process, as a C
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server process, as a C
+<!## end>
function can do. Thus, unprivileged database users can be trusted
to use this language; it does not give them unlimited authority.
</para>
@@ -87,6 +98,9 @@
<!## XC>
installed in the <productname>Postgres-XC</productname> library
<!## end>
+<!## XL>
+ installed in the <productname>Postgres-XL</productname> library
+<!## end>
directory if Tcl support is specified in the configuration step of
the installation procedure. To install <application>PL/Tcl</>
and/or <application>PL/TclU</> in a particular database, use the
@@ -394,6 +408,7 @@ spi_exec -array C "SELECT * FROM pg_class" {
<function>spi_execp</function> for an example.
</para>
</listitem>
+ </varlistentry>
<!## end>
<!## XC>
<listitem>
@@ -403,8 +418,15 @@ spi_exec -array C "SELECT * FROM pg_class" {
supported in the future releases.
</para>
</listitem>
+ </varlistentry>
<!## end>
+<!## XL>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
</varlistentry>
+<!## end>
<varlistentry>
<term><literal><function>spi_execp</> <optional role="tcl">-count <replaceable>n</replaceable></optional> <optional role="tcl">-array <replaceable>name</replaceable></optional> <optional role="tcl">-nulls <replaceable>string</replaceable></optional> <replaceable>queryid</replaceable> <optional role="tcl"><replaceable>value-list</replaceable></optional> <optional role="tcl"><replaceable>loop-body</replaceable></optional></literal></term>
@@ -472,6 +494,12 @@ $$ LANGUAGE pltcl;
</para>
</listitem>
<!## end>
+<!## XL>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+<!## end>
</varlistentry>
<varlistentry>
@@ -493,6 +521,13 @@ $$ LANGUAGE pltcl;
and Coordinator.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that OID is maintained locally at each Datanode
+ and Coordinator, and cannot be used globally throughout the cluster.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -596,6 +631,9 @@ SELECT 'doesn''t' AS ret
<!## XC>
<productname>Postgres-XC</productname> requires that a procedure that is to be called
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> requires that a procedure that is to be called
+<!## end>
as a trigger must be declared as a function with no arguments
and a return type of <literal>trigger</>.
</para>
@@ -658,6 +696,9 @@ SELECT 'doesn''t' AS ret
<!## XC>
numbered in <productname>Postgres-XC</productname>. (Empty list
<!## end>
+<!## XL>
+ numbered in <productname>Postgres-XL</productname>. (Empty list
+<!## end>
elements also appear in the positions of columns that have been
dropped, so that the attribute numbering is correct for columns
to their right.)
@@ -795,6 +836,14 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Trigger is not supported in the current release
+ of <productname>Postgres-XL</>. This may be supported in the
+ future releases.
+ </para>
+<!## end>
</sect1>
<sect1 id="pltcl-unknown">
@@ -830,6 +879,9 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
<!## XC>
The <productname>Postgres-XC</productname> distribution includes
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> distribution includes
+<!## end>
support scripts to maintain these tables:
<command>pltcl_loadmod</>, <command>pltcl_listmod</>,
<command>pltcl_delmod</>, as well as source for the standard
@@ -859,6 +911,9 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
<!## XC>
In <productname>Postgres-XC</productname>, the same function name can be used for
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname>, the same function name can be used for
+<!## end>
different function definitions as long as the number of arguments or their types
differ. Tcl, however, requires all procedure names to be distinct.
PL/Tcl deals with this by making the internal Tcl procedure names contain
@@ -870,6 +925,9 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
<!## XC>
<productname>Postgres-XC</productname> functions with the same name
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> functions with the same name
+<!## end>
and different argument types will be different Tcl procedures, too. This
is not normally a concern for a PL/Tcl programmer, but it might be visible
when debugging.
diff --git a/doc-xc/src/sgml/postgres.sgmlin b/doc-xc/src/sgml/postgres.sgmlin
index e31ac99952..b82f37657a 100644
--- a/doc-xc/src/sgml/postgres.sgmlin
+++ b/doc-xc/src/sgml/postgres.sgmlin
@@ -18,6 +18,9 @@
<!## XC>
<title>Postgres-XC &version; Documentation</title>
<!## end>
+<!## XL>
+ <title>Postgres-XL &version; Documentation</title>
+<!## end>
<bookinfo>
<!## PG>
@@ -30,6 +33,11 @@
<productname>Postgres-XC</productname>
<productnumber>&version;</productnumber>
<!## end>
+<!## XL>
+ <corpauthor>The Postgres-XL Development Group</corpauthor>
+ <productname>Postgres-XL</productname>
+ <productnumber>&version;</productnumber>
+<!## end>
&legal;
</bookinfo>
@@ -67,6 +75,19 @@
<productname>Postgres-XC</productname> system. It makes no attempt
to be a complete or thorough treatment of the topics it covers.
<!## end>
+<!## XL>
+&common;
+ Welcome to the <productname>Postgres-XL</productname> Tutorial. The
+ following few chapters are intended to give a simple introduction
+ to <productname>Postgres-XL</productname>, relational database
+ concepts, and the SQL language to those who are new to any one of
+ these aspects. We only assume some general knowledge about how to
+ use computers. No particular Unix or programming experience is
+ required. This part is mainly intended to give you some hands-on
+ experience with important aspects of the
+ <productname>Postgres-XL</productname> system. It makes no attempt
+ to be a complete or thorough treatment of the topics it covers.
+<!## end>
</para>
<para>
@@ -86,6 +107,14 @@
<productname>Postgres-XC</productname>. Those who set up and
manage their own server should also read <xref linkend="admin">.
<!## end>
+<!## XL>
+ After you have worked through this tutorial you might want to move
+ on to reading <xref linkend="sql"> to gain a more formal knowledge
+ of the SQL language, or <xref linkend="client-interfaces"> for
+ information about developing applications for
+ <productname>Postgres-XL</productname>. Those who set up and
+ manage their own server should also read <xref linkend="admin">.
+<!## end>
</para>
</partintro>
@@ -124,6 +153,17 @@
aspects that are important for tuning a database for optimal
performance.
<!## end>
+<!## XL>
+ This part describes the use of the <acronym>SQL</acronym> language
+ in <productname>Postgres-XL</productname>, inherited from <productname>PostgreSQL</>. We start with
+ describing the general syntax of <acronym>SQL</acronym>, then
+ explain how to create the structures to hold data, how to populate
+ the database, and how to query it. The middle part lists the
+ available data types and functions for use in
+ <acronym>SQL</acronym> commands. The rest treats several
+ aspects that are important for tuning a database for optimal
+ performance.
+<!## end>
</para>
<para>
@@ -158,6 +198,16 @@
<application>psql</application>, but other programs that have
similar functionality can be used as well.
<!## end>
+<!## XL>
+ Readers of this part should know how to connect to a
+ <productname>Postgres-XL</> database and issue
+ <acronym>SQL</acronym> commands. Readers that are unfamiliar with
+ these issues are encouraged to read <xref linkend="tutorial">
+ first. <acronym>SQL</acronym> commands are typically entered
+ using the <productname>Postgres-XL</> interactive terminal
+ <application>psql</application>, but other programs that have
+ similar functionality can be used as well.
+<!## end>
</para>
</partintro>
@@ -179,7 +229,6 @@
<title>Server Administration</title>
<partintro>
-&xconly;
<!## PG>
<para>
@@ -193,6 +242,7 @@
</para>
<!## end>
<!## XC>
+&xconly;
<para>
This part covers topics that are of interest to a
<productname>Postgres-XC</> database administrator. This includes
@@ -203,6 +253,17 @@
with the topics covered in this part.
</para>
<!## end>
+<!## XL>
+ <para>
+ This part covers topics that are of interest to a
+ <productname>Postgres-XL</> database administrator. This includes
+ installation of the software, set up and configuration of the
+ servers, management of users and databases, and maintenance tasks.
+ Anyone who runs a <productname>Postgres-XL</> servers, even for
+ personal use, but especially in production, should be familiar
+ with the topics covered in this part.
+ </para>
+<!## end>
<para>
The information in this part is arranged approximately in the
@@ -243,7 +304,8 @@
&diskusage;
&wal;
&regress;
-
+ &add-node;
+ &remove-node;
</part>
<part id="client-interfaces">
diff --git a/doc-xc/src/sgml/problems.sgmlin b/doc-xc/src/sgml/problems.sgmlin
index 23c6666b84..65bb6f0498 100644
--- a/doc-xc/src/sgml/problems.sgmlin
+++ b/doc-xc/src/sgml/problems.sgmlin
@@ -3,7 +3,6 @@
<sect1 id="bug-reporting">
<title>Bug Reporting Guidelines</title>
-&xconly;
<para>
<!## PG>
When you find a bug in <productname>PostgreSQL</productname> we want to
@@ -14,6 +13,7 @@
will work on every platform under every circumstance.
<!## end>
<!## XC>
+&xconly;
When you find a bug in <productname>Postgres-XC</productname> we want to
hear about it. Your bug reports play an important part in making
<productname>Postgres-XC</productname> more reliable because even the utmost
@@ -21,6 +21,15 @@
<productname>Postgres-XC</productname>
will work on every platform under every circumstance.
<!## end>
+<!## XL>
+&xlonly;
+ When you find a bug in <productname>Postgres-XL</productname> we want to
+ hear about it. Your bug reports play an important part in making
+ <productname>Postgres-XL</productname> more reliable because even the utmost
+ care cannot guarantee that every part of
+ <productname>Postgres-XL</productname>
+ will work on every platform under every circumstance.
+<!## end>
</para>
<para>
@@ -41,7 +50,6 @@
<sect2>
<title>Identifying Bugs</title>
-&xconly;
<para>
Before you report a bug, please read and re-read the
documentation to verify that you can really do whatever it is you are
@@ -91,6 +99,10 @@
<productname>Postgres-XC</productname> fails to compile, build, or
install according to the instructions on supported platforms.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> fails to compile, build, or
+ install according to the instructions on supported platforms.
+<!## end>
</para>
</listitem>
</itemizedlist>
@@ -118,7 +130,6 @@
<sect2>
<title>What to Report</title>
-&xconly;
<para>
The most important thing to remember about bug reporting is to state all
the facts and only facts. Do not speculate what you think went wrong, what
@@ -245,6 +256,9 @@
<!## XC>
The <productname>Postgres-XC</productname> version. You can run the command
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> version. You can run the command
+<!## end>
<literal>SELECT version();</literal> to
find out the version of the server you are connected to. Most executable
programs also support a <option>--version</option> option; at least
@@ -278,6 +292,16 @@
require more than we can provide, consider acquiring a
commercial support contract.
<!## end>
+<!## XL>
+ If your version is older than &version; we will almost certainly
+ tell you to upgrade. There are many bug fixes and improvements
+ in each new release, so it is quite possible that a bug you have
+ encountered in an older release of <productname>Postgres-XL</>
+ has already been fixed. We can only provide limited support for
+ sites using older releases of <productname>Postgres-XL</>; if you
+ require more than we can provide, consider acquiring a
+ commercial support contract.
+<!## end>
</para>
<para>
</para>
@@ -311,6 +335,12 @@
facts out of you. On the other hand, if your input files are huge, it is
fair to ask first whether somebody is interested in looking into it.
<!## end>
+<!## XL>
+ Do not be afraid if your bug report becomes rather lengthy. That is a fact of life.
+ It is better to report everything the first time than us having to squeeze the
+ facts out of you. On the other hand, if your input files are huge, it is
+ fair to ask first whether somebody is interested in looking into it.
+<!## end>
</para>
<para>
@@ -354,13 +384,30 @@
about whether the problem is on the client or server side.
</para>
<!## end>
+<!## XL>
+ <para>
+ When writing a bug report, please avoid confusing terminology.
+ The software package in total is called <quote>Postgres-XL</quote>.
+ If you
+ are specifically talking about the backend server, mention that, do not
+ just say <quote>Postgres-XL crashes</quote>.
+ <quote>Postgres-XL</> consists of several separate component. Please
+ write which component crashes.
+ A crash of a single
+ backend server process is quite different from crash of the parent
+ <quote>postgres</> process; please don't say <quote>the server
+ crashed</> when you mean a single backend process went down, nor vice versa.
+ Also, client programs such as the interactive frontend <quote><application>psql</application></quote>
+ are completely separate from the backend. Please try to be specific
+ about whether the problem is on the client or server side.
+ </para>
+<!## end>
</sect2>
<sect2>
<title>Where to Report Bugs</title>
-&xconly;
<para>
<!## PG>
In general, send bug reports to the bug report mailing list at
@@ -369,10 +416,22 @@
message, perhaps parts of the error message.
<!## end>
<!## XC>
+&xconly;
+ In general, send bug reports to the bug report mailing list.
+ <footnote>
+ <para>
+ <email>[email protected]</email>
+ </para>
+ </footnote>
+ You are requested to use a descriptive subject for your email
+ message, perhaps parts of the error message.
+<!## end>
+<!## XL>
+&xlonly;
In general, send bug reports to the bug report mailing list.
<footnote>
<para>
- <email>[email protected]</email>
+ <email>[email protected]</email>
</para>
</footnote>
You are requested to use a descriptive subject for your email
@@ -414,7 +473,18 @@
Do not send bug reports to any of the user mailing lists.
<footnote>
<para>
- <email>[email protected]</email>
+ <email>[email protected]</email>
+ </para>
+ </footnote>
+ These mailing lists are for answering
+ user questions, and their subscribers normally do not wish to receive
+ bug reports. More importantly, they are unlikely to fix them.
+<!## end>
+<!## XL>
+ Do not send bug reports to any of the user mailing lists.
+ <footnote>
+ <para>
+ <email>[email protected]</email>
</para>
</footnote>
These mailing lists are for answering
@@ -448,7 +518,18 @@
is the documentation mailing list.
<footnote>
<para>
- <email>[email protected]</email>
+ <email>[email protected]</email>
+ </para>
+ </footnote>
+ Please be specific about what part of the documentation you are unhappy
+ with.
+<!## end>
+<!## XL>
+ If you have a problem with the documentation, the best place to report it
+ is the documentation mailing list.
+ <footnote>
+ <para>
+ <email>[email protected]</email>
</para>
</footnote>
Please be specific about what part of the documentation you are unhappy
@@ -468,12 +549,23 @@
send mail to the developers mailing list,
<footnote>
<para>
- <email>[email protected]</email>
+ <email>[email protected]</email>
</para>
</footnote>
so we (and you) can work on
porting <productname>Postgres-XC</productname> to your platform.
<!## end>
+<!## XL>
+ If your bug is a portability problem on a non-supported platform,
+ send mail to the developers mailing list,
+ <footnote>
+ <para>
+ <email>[email protected]</email>
+ </para>
+ </footnote>
+ so we (and you) can work on
+ porting <productname>Postgres-XL</productname> to your platform.
+<!## end>
</para>
<note>
@@ -497,6 +589,14 @@
If you would like to send mail but do not want to receive list traffic,
you can subscribe and set your subscription option to <literal>nomail</>.
<!## end>
+<!## XL>
+ Due to the unfortunate amount of spam going around, all of the above
+ email addresses are closed mailing lists. That is, you need to be
+ subscribed to a list to be allowed to post on it. (You need not be
+ subscribed to use the bug-report web form, however.)
+ If you would like to send mail but do not want to receive list traffic,
+ you can subscribe and set your subscription option to <literal>nomail</>.
+<!## end>
</para>
</note>
</sect2>
diff --git a/doc-xc/src/sgml/queries.sgmlin b/doc-xc/src/sgml/queries.sgmlin
index 845932c128..73973d9bf3 100644
--- a/doc-xc/src/sgml/queries.sgmlin
+++ b/doc-xc/src/sgml/queries.sgmlin
@@ -913,6 +913,9 @@ SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
<!## XC>
the source table but <productname>Postgres-XC</productname> extends
<!## end>
+<!## XL>
+ the source table but <productname>Postgres-XL</productname> extends
+<!## end>
this to also allow <literal>GROUP BY</> to group by columns in the
select list. Grouping by value expressions instead of simple
column names is also allowed.
@@ -1129,6 +1132,9 @@ SELECT a AS value, b + c AS sum FROM ...
<!## XC>
<productname>Postgres-XC</productname> keyword (see <xref
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> keyword (see <xref
+<!## end>
linkend="sql-keywords-appendix">). To avoid an accidental match to
a keyword, you can double-quote the column name. For example,
<literal>VALUE</> is a keyword, so this does not work:
@@ -1349,6 +1355,9 @@ SELECT a, b FROM table1 ORDER BY a + b, c;
<!## XC>
Actually, <productname>Postgres-XC</> uses the <firstterm>default B-tree
<!## end>
+<!## XL>
+ Actually, <productname>Postgres-XL</> uses the <firstterm>default B-tree
+<!## end>
operator class</> for the expression's data type to determine the sort
ordering for <literal>ASC</> and <literal>DESC</>. Conventionally,
data types will be set up so that the <literal>&lt;</literal> and
@@ -1518,6 +1527,9 @@ SELECT 3, 'three';
<!## XC>
By default, <productname>Postgres-XC</productname> assigns the names
<!## end>
+<!## XL>
+ By default, <productname>Postgres-XL</productname> assigns the names
+<!## end>
<literal>column1</>, <literal>column2</>, etc. to the columns of a
<literal>VALUES</> table. The column names are not specified by the
SQL standard and different database systems do it differently, so
@@ -1817,6 +1829,9 @@ SELECT n FROM t LIMIT 100;
<!## XC>
This works because <productname>Postgres-XC</productname>'s implementation
<!## end>
+<!## XL>
+ This works because <productname>Postgres-XL</productname>'s implementation
+<!## end>
evaluates only as many rows of a <literal>WITH</> query as are actually
fetched by the parent query. Using this trick in production is not
recommended, because other systems might work differently. Also, it
diff --git a/doc-xc/src/sgml/query.sgmlin b/doc-xc/src/sgml/query.sgmlin
index 5412f9c362..d077e6d614 100644
--- a/doc-xc/src/sgml/query.sgmlin
+++ b/doc-xc/src/sgml/query.sgmlin
@@ -21,6 +21,10 @@
You should be aware that some <productname>Postgres-XC</productname>
language features are extensions to the standard.
<!## end>
+<!## XL>
+ You should be aware that some <productname>Postgres-XL</productname>
+ language features are extensions to the standard.
+<!## end>
</para>
<para>
@@ -46,6 +50,14 @@
compile these files.) To use those
files, first change to that directory and run <application>make</>:
<!## end>
+<!## XL>
+ Examples in this manual can also be found in the
+ <productname>Postgres-XL</productname> source distribution
+ in the directory <filename>src/tutorial/</filename>. (Binary
+ distributions of <productname>Postgres-XL</productname> might not
+ compile these files.) To use those
+ files, first change to that directory and run <application>make</>:
+<!## end>
<screen>
<prompt>$</prompt> <userinput>cd <replaceable>....</replaceable>/src/tutorial</userinput>
@@ -96,6 +108,9 @@
<!## XC>
<productname>Postgres-XC</productname> is a <firstterm>relational
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> is a <firstterm>relational
+<!## end>
database management system</firstterm> (<acronym>RDBMS</acronym>).
That means it is a system for managing data stored in
<firstterm>relations</firstterm>. Relation is essentially a
@@ -147,6 +162,23 @@
-->
</para>
<!## end>
+<!## XL>
+ Tables are grouped into databases, and a collection of databases
+ managed by a single <productname>Postgres-XL</productname>
+ <firstterm>cluster</firstterm>.
+ </para>
+ <para>
+&xlonly;
+ In <productname>Postgres-XL</> these databases can be distributed onto more than one Datanodes.
+ This will not affect how tables and rows are seen from applications' point of view, but will be
+ important for Database Administrator (DBA).
+ Table distribution will be described later.
+<!--
+ TODO:
+ Add reference point of the above.
+-->
+ </para>
+<!## end>
</sect1>
@@ -205,6 +237,9 @@ CREATE TABLE weather (
<!## XC>
<productname>Postgres-XC</productname> supports the standard
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports the standard
+<!## end>
<acronym>SQL</acronym> types <type>int</type>,
<type>smallint</type>, <type>real</type>, <type>double
precision</type>, <type>char(<replaceable>N</>)</type>,
@@ -218,6 +253,9 @@ CREATE TABLE weather (
<!## XC>
<productname>Postgres-XC</productname> can be customized with an
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can be customized with an
+<!## end>
arbitrary number of user-defined data types. Consequently, type
names are not key words in the syntax, except where required to
support special cases in the <acronym>SQL</acronym> standard.
@@ -239,6 +277,9 @@ CREATE TABLE cities (
<!## XC>
<productname>Postgres-XC</productname>-specific data type.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>-specific data type.
+<!## end>
</para>
<para>
@@ -481,6 +522,9 @@ SELECT DISTINCT city
<!## XC>
<productname>Postgres-XC</productname>, the implementation of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, the implementation of
+<!## end>
<literal>DISTINCT</literal> automatically orders the rows and
so <literal>ORDER BY</literal> is unnecessary. But this is not
required by the SQL standard, and current
@@ -490,6 +534,9 @@ SELECT DISTINCT city
<!## XC>
<productname>Postgres-XC</productname> does not guarantee that
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> does not guarantee that
+<!## end>
<literal>DISTINCT</literal> causes the rows to be ordered.
</para>
</footnote>
@@ -721,6 +768,9 @@ SELECT *
<!## XC>
<productname>Postgres-XC</productname> supports
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports
+<!## end>
<firstterm>aggregate functions</>.
An aggregate function computes a single result from multiple input rows.
For example, there are aggregates to compute the
diff --git a/doc-xc/src/sgml/recovery-config.sgmlin b/doc-xc/src/sgml/recovery-config.sgmlin
index f098378524..9c2b405ff7 100644
--- a/doc-xc/src/sgml/recovery-config.sgmlin
+++ b/doc-xc/src/sgml/recovery-config.sgmlin
@@ -63,6 +63,9 @@
<!## XC>
.
<!## end>
+<!## XL>
+.
+<!## end>
<!## XC>
<footnote>
<para>
@@ -76,6 +79,19 @@
</para>
</footnote>
<!## end>
+<!## XL>
+ <footnote>
+ <para>
+ Although <productname>Postgres-XL</productname> does not
+ prohibit to use warm-standby, in either Coordinators or
+ Datanodes (see <xref linkend="xc-overview">), there's no
+ guarantee that warm-standbys are synchronized. If you use
+ warm standby for high availability feature, there's a risk
+ that data in Coordinators and Datanodes are inconsistent.
+ It is highly recommended to use <command>BARRIER</command>.
+ </para>
+ </footnote>
+<!## end>
Write <literal>%%</> to embed an actual <literal>%</> character.
</para>
@@ -125,6 +141,9 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
<!## XC>
warm-standby configuration.
<!## end>
+<!## XL>
+ warm-standby configuration.
+<!## end>
Write <literal>%%</> to embed an actual <literal>%</> character in the
command.
</para>
@@ -196,7 +215,6 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
</indexterm>
<listitem>
<para>
-&xconly;
This parameter specifies the time stamp up to which recovery
will proceed.
<!## PG>
@@ -205,6 +223,14 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
<xref linkend="recovery-target-xid"> can be specified.
<!## end>
<!## XC>
+&xconly;
+ At most one of <varname>recovery_target_time</>,
+ <xref linkend="recovery-target-name">,
+ <xref linkend="recovery-target-xid"> or
+ <xref linkend="recovery-target-barrier"> can be specified.
+<!## end>
+<!## XL>
+&xlonly;
At most one of <varname>recovery_target_time</>,
<xref linkend="recovery-target-name">,
<xref linkend="recovery-target-xid"> or
@@ -223,7 +249,6 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
<primary><varname>recovery_target_xid</> recovery parameter</primary>
</indexterm>
<listitem>
-&xconly;
<para>
This parameter specifies the transaction ID up to which recovery
will proceed. Keep in mind
@@ -264,6 +289,34 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
<xref linkend="recovery-target-time"> and
<varname>recovery_target_barrier</> can be specified.
<!## end>
+<!## XL>
+ At most one of <varname>recovery_target_xid</>,
+ <xref linkend="recovery-target-name">,
+ <xref linkend="recovery-target-time"> or
+ <xref linkend="recovery-target-barrier"> can be specified.
+
+ The default is to recover to the end of the WAL log.
+ The precise stopping point is also influenced by
+ <xref linkend="recovery-target-inclusive">.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="recovery-target-barrier" xreflabel="recovery_target_barrier">
+ <term><varname>recovery_target_barrier</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>recovery_target_barrier</> recovery parameter</primary>
+ </indexterm>
+ <listitem>
+&xlonly;
+ <para>
+ This parameter specifies the barrier ID up to which recovery
+ will proceed. A global consistency is guaranteed when recovery is
+ stopped at a previously successfully completed barrier. At most
+ one of <varname>recovery_target_xid</>,
+ <xref linkend="recovery-target-time"> and
+ <varname>recovery_target_barrier</> can be specified.
+<!## end>
The default is to recover to the end of the WAL log.
The precise stopping point is also influenced by
<xref linkend="recovery-target-inclusive">.
diff --git a/doc-xc/src/sgml/ref/abort.sgmlin b/doc-xc/src/sgml/ref/abort.sgmlin
index bbb7967344..6996f62af7 100644
--- a/doc-xc/src/sgml/ref/abort.sgmlin
+++ b/doc-xc/src/sgml/ref/abort.sgmlin
@@ -91,6 +91,9 @@ ABORT;
<!## XC>
This command is a <productname>Postgres-XC</productname> extension
<!## end>
+<!## XL>
+ This command is a <productname>Postgres-XL</productname> extension
+<!## end>
present for historical reasons. <command>ROLLBACK</command> is the
equivalent standard SQL command.
</para>
diff --git a/doc-xc/src/sgml/ref/allfiles.sgmlin b/doc-xc/src/sgml/ref/allfiles.sgmlin
index 67479233ad..cefefc5fef 100644
--- a/doc-xc/src/sgml/ref/allfiles.sgmlin
+++ b/doc-xc/src/sgml/ref/allfiles.sgmlin
@@ -23,6 +23,9 @@ Complete list of usable sgml source files in this directory.
<!## XC>
<!entity alterNode SYSTEM "alter_node.sgml">
<!## end>
+<!## XL>
+<!entity alterNode SYSTEM "alter_node.sgml">
+<!## end>
<!ENTITY alterOperator SYSTEM "alter_operator.sgml">
<!ENTITY alterOperatorClass SYSTEM "alter_opclass.sgml">
<!ENTITY alterOperatorFamily SYSTEM "alter_opfamily.sgml">
@@ -46,6 +49,9 @@ Complete list of usable sgml source files in this directory.
<!## XC>
<!entity cleanConnection system "clean_connection.sgml">
<!## end>
+<!## XL>
+<!entity cleanConnection system "clean_connection.sgml">
+<!## end>
<!ENTITY checkpoint SYSTEM "checkpoint.sgml">
<!ENTITY close SYSTEM "close.sgml">
<!ENTITY cluster SYSTEM "cluster.sgml">
@@ -57,6 +63,9 @@ Complete list of usable sgml source files in this directory.
<!## XC>
<!entity createBarrier system "create_barrier.sgml">
<!## end>
+<!## XL>
+<!entity createBarrier system "create_barrier.sgml">
+<!## end>
<!ENTITY createCast SYSTEM "create_cast.sgml">
<!ENTITY createCollation SYSTEM "create_collation.sgml">
<!ENTITY createConversion SYSTEM "create_conversion.sgml">
@@ -73,6 +82,10 @@ Complete list of usable sgml source files in this directory.
<!entity createNode SYSTEM "create_node.sgml">
<!entity createNodeGroup SYSTEM "create_nodegroup.sgml">
<!## end>
+<!## XL>
+<!entity createNode SYSTEM "create_node.sgml">
+<!entity createNodeGroup SYSTEM "create_nodegroup.sgml">
+<!## end>
<!ENTITY createOperator SYSTEM "create_operator.sgml">
<!ENTITY createOperatorClass SYSTEM "create_opclass.sgml">
<!ENTITY createOperatorFamily SYSTEM "create_opfamily.sgml">
@@ -115,6 +128,10 @@ Complete list of usable sgml source files in this directory.
<!entity dropNode SYSTEM "drop_node.sgml">
<!entity dropNodeGroup SYSTEM "drop_nodegroup.sgml">
<!## end>
+<!## XL>
+<!entity dropNode SYSTEM "drop_node.sgml">
+<!entity dropNodeGroup SYSTEM "drop_nodegroup.sgml">
+<!## end>
<!ENTITY dropOperator SYSTEM "drop_operator.sgml">
<!ENTITY dropOperatorClass SYSTEM "drop_opclass.sgml">
<!ENTITY dropOperatorFamily SYSTEM "drop_opfamily.sgml">
@@ -140,6 +157,9 @@ Complete list of usable sgml source files in this directory.
<!## XC>
<!entity executeDirect system "execute_direct.sgml">
<!## end>
+<!## XL>
+<!entity executeDirect system "execute_direct.sgml">
+<!## end>
<!ENTITY explain SYSTEM "explain.sgml">
<!ENTITY fetch SYSTEM "fetch.sgml">
<!ENTITY grant SYSTEM "grant.sgml">
@@ -149,6 +169,9 @@ Complete list of usable sgml source files in this directory.
<!ENTITY lock SYSTEM "lock.sgml">
<!ENTITY move SYSTEM "move.sgml">
<!ENTITY notify SYSTEM "notify.sgml">
+<!## XL>
+<!ENTITY pauseCluster SYSTEM "pause_cluster.sgml">
+<!## end>
<!ENTITY prepare SYSTEM "prepare.sgml">
<!ENTITY prepareTransaction SYSTEM "prepare_transaction.sgml">
<!ENTITY reassignOwned SYSTEM "reassign_owned.sgml">
@@ -172,6 +195,9 @@ Complete list of usable sgml source files in this directory.
<!ENTITY startTransaction SYSTEM "start_transaction.sgml">
<!ENTITY truncate SYSTEM "truncate.sgml">
<!ENTITY unlisten SYSTEM "unlisten.sgml">
+<!## XL>
+<!ENTITY unpauseCluster SYSTEM "unpause_cluster.sgml">
+<!## end>
<!ENTITY update SYSTEM "update.sgml">
<!ENTITY vacuum SYSTEM "vacuum.sgml">
<!ENTITY values SYSTEM "values.sgml">
@@ -182,6 +208,11 @@ Complete list of usable sgml source files in this directory.
<!entity gtmPxy system "gtm_proxy.sgml">
<!entity gtmCtl system "gtm_ctl.sgml">
<!## end>
+<!## XL>
+<!entity gtm system "gtm.sgml">
+<!entity gtmPxy system "gtm_proxy.sgml">
+<!entity gtmCtl system "gtm_ctl.sgml">
+<!## end>
<!ENTITY clusterdb SYSTEM "clusterdb.sgml">
<!ENTITY createdb SYSTEM "createdb.sgml">
<!ENTITY createlang SYSTEM "createlang.sgml">
@@ -194,6 +225,9 @@ Complete list of usable sgml source files in this directory.
<!## XC>
<!ENTITY initgtm SYSTEM "initgtm.sgml">
<!## end>
+<!## XL>
+<!ENTITY initgtm SYSTEM "initgtm.sgml">
+<!## end>
<!ENTITY pgBasebackup SYSTEM "pg_basebackup.sgml">
<!ENTITY pgConfig SYSTEM "pg_config-ref.sgml">
<!ENTITY pgControldata SYSTEM "pg_controldata.sgml">
diff --git a/doc-xc/src/sgml/ref/alter_database.sgmlin b/doc-xc/src/sgml/ref/alter_database.sgmlin
index a51cc30496..72f169642b 100644
--- a/doc-xc/src/sgml/ref/alter_database.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_database.sgmlin
@@ -89,6 +89,9 @@ ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET ALL
<!## XC>
configuration variable for a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ configuration variable for a <productname>Postgres-XL</productname>
+<!## end>
database. Whenever a new session is subsequently started in that
database, the specified value becomes the session default value.
The database-specific default overrides whatever setting is present
@@ -107,6 +110,15 @@ ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET ALL
CONNECITON</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If there are any live connections to any of the template databases in
+ one of the Coordinators or Datanodes, you will have an error message. In this
+ case, you should clean these connections using <command>CLEAN
+ CONNECITON</> statement.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -221,6 +233,9 @@ ALTER DATABASE test SET enable_indexscan TO off;
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_domain.sgmlin b/doc-xc/src/sgml/ref/alter_domain.sgmlin
index 3dbd3dc007..284ba8f771 100644
--- a/doc-xc/src/sgml/ref/alter_domain.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_domain.sgmlin
@@ -261,6 +261,9 @@ ALTER DOMAIN zipcode SET SCHEMA customers;
<!## XC>
which are <productname>Postgres-XC</productname> extensions.
<!## end>
+<!## XL>
+ which are <productname>Postgres-XL</productname> extensions.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_foreign_data_wrapper.sgmlin b/doc-xc/src/sgml/ref/alter_foreign_data_wrapper.sgmlin
index ab4888bfcb..1eb9e8ef39 100644
--- a/doc-xc/src/sgml/ref/alter_foreign_data_wrapper.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_foreign_data_wrapper.sgmlin
@@ -39,6 +39,14 @@ ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> OWN
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>FOREIGN DATA WRAPPER</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/alter_function.sgmlin b/doc-xc/src/sgml/ref/alter_function.sgmlin
index a193b8cc73..2d974f2b8b 100644
--- a/doc-xc/src/sgml/ref/alter_function.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_function.sgmlin
@@ -313,6 +313,9 @@ ALTER FUNCTION check_password(text) RESET search_path;
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_index.sgmlin b/doc-xc/src/sgml/ref/alter_index.sgmlin
index 5b97b283cf..b0f3cfc805 100644
--- a/doc-xc/src/sgml/ref/alter_index.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_index.sgmlin
@@ -207,6 +207,9 @@ REINDEX INDEX distributors;
<!## XC>
<command>ALTER INDEX</> is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <command>ALTER INDEX</> is a <productname>Postgres-XL</productname>
+<!## end>
extension.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_large_object.sgmlin b/doc-xc/src/sgml/ref/alter_large_object.sgmlin
index fce746b6d4..82c3dfef1e 100644
--- a/doc-xc/src/sgml/ref/alter_large_object.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_large_object.sgmlin
@@ -35,6 +35,14 @@ ALTER LARGE OBJECT <replaceable class="PARAMETER">large_object_oid</replaceable>
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>LARGE OBJECT</> has not been supported
+ by <productname>Postgres-XL</> yet. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgnotice;
diff --git a/doc-xc/src/sgml/ref/alter_node.sgmlin b/doc-xc/src/sgml/ref/alter_node.sgmlin
index 042a6d99ff..7ebd3a14d0 100644
--- a/doc-xc/src/sgml/ref/alter_node.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_node.sgmlin
@@ -44,7 +44,7 @@ ALTER NODE <replaceable class="parameter">nodename</replaceable> WITH
cluster node information in catalog pgxc_node.
</para>
<para>
- Node connection that has been modified does not guarranty that connection
+ Node connection that has been modified does not guaranty that connection
information cached in pooler is updated accordingly.
</para>
<para>
@@ -165,3 +165,166 @@ ALTER NODE coord_node WITH (PORT = 6543, HOST = 'localhost');
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-ALTERNODE">
+ <refmeta>
+ <refentrytitle>ALTER NODE</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>ALTER NODE</refname>
+ <refpurpose>alter a cluster node</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-alternode">
+ <primary>ALTER NODE</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+ALTER NODE <replaceable class="parameter">nodename</replaceable> WITH
+ (
+ [ TYPE = <replaceable class="parameter">nodetype</replaceable>,]
+ [ HOST = <replaceable class="parameter">hostname</replaceable>,]
+ [ PORT = <replaceable class="parameter">portnum</replaceable>,]
+ [ PRIMARY [ = <replaceable class="parameter">boolean</replaceable>],]
+ [ PREFERRED [ = <replaceable class="parameter">boolean</replaceable> ] ]
+ )
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>ALTER NODE</command> is a new SQL command specific
+ to <productname>Postgres-XL</productname> that modifies
+ cluster node information in catalog pgxc_node.
+ </para>
+ <para>
+ Node connection that has been modified does not guaranty that connection
+ information cached in pooler is updated accordingly.
+ </para>
+ <para>
+ <command>ALTER NODE</command> only runs on the local node where it is launched.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Parameters</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="parameter">nodename</replaceable></term>
+ <listitem>
+ <para>
+ The name of the selected cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>TYPE</literal></term>
+ <listitem>
+ <para>
+ The type of the cluster node. It is possible to specify
+ a Coordinator node or a Datanode node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>PRIMARY</literal></term>
+ <listitem>
+ <para>
+ Defines if the cluster node is used as a primary node for replicated
+ write operations. A <replaceable class="parameter">boolean</replaceable>
+ value can be specified. In case no value is specified, <literal>PRIMARY</literal>
+ acts like <literal>true</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>PREFERRED</literal></term>
+ <listitem>
+ <para>
+ Defines if the cluster node is used as a preferred node for replicated
+ read operations. A <replaceable class="parameter">boolean</replaceable>
+ value can be specified. In case no value is specified, <literal>PREFERRED</literal>
+ acts like <literal>true</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">nodetype</replaceable></term>
+ <listitem>
+ <para>
+ The node type for given cluster node. Possible values are:
+ 'coordinator' for a Coordinator node and 'datanode' for a
+ Datanode node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">hostname</replaceable></term>
+ <listitem>
+ <para>
+ The hostname or IP used to connect to the cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">portnum</replaceable></term>
+ <listitem>
+ <para>
+ The port number used to connect to the cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Notes</title>
+ <para>
+ A Datanode can be modified as <literal>PRIMARY</literal> and
+ as <literal>PREFERRED</literal> as many times as necessary.
+ </para>
+
+ <para>
+ A node type cannot be modified.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+ <para>
+ Modify a Coordinator node located on local machine to use port 6543.
+<programlisting>
+ALTER NODE coord_node WITH (PORT = 6543, HOST = 'localhost');
+</programlisting>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>ALTER NODE</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/alter_opfamily.sgmlin b/doc-xc/src/sgml/ref/alter_opfamily.sgmlin
index 0350b8a576..217396e58a 100644
--- a/doc-xc/src/sgml/ref/alter_opfamily.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_opfamily.sgmlin
@@ -62,6 +62,9 @@ ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="
<!## XC>
<productname>Postgres-XC</productname> will allow loose members of a
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will allow loose members of a
+<!## end>
family to be dropped from the family at any time, but members of an
operator class cannot be dropped without dropping the whole class and
any indexes that depend on it.
diff --git a/doc-xc/src/sgml/ref/alter_role.sgmlin b/doc-xc/src/sgml/ref/alter_role.sgmlin
index b0489520e1..5e9dbbbd64 100644
--- a/doc-xc/src/sgml/ref/alter_role.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_role.sgmlin
@@ -58,6 +58,9 @@ ALTER ROLE <replaceable class="PARAMETER">name</replaceable> [ IN DATABASE <repl
<!## XC>
<productname>Postgres-XC</productname> role.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> role.
+<!## end>
</para>
<para>
@@ -311,6 +314,9 @@ ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_server.sgmlin b/doc-xc/src/sgml/ref/alter_server.sgmlin
index 9da26e6ee2..0a60d34c6a 100644
--- a/doc-xc/src/sgml/ref/alter_server.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_server.sgmlin
@@ -37,6 +37,14 @@ ALTER SERVER <replaceable class="PARAMETER">server_name</replaceable> OWNER TO <
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>SERVER</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/alter_table.sgmlin b/doc-xc/src/sgml/ref/alter_table.sgmlin
index 8174cb96a2..eaf8675ede 100644
--- a/doc-xc/src/sgml/ref/alter_table.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_table.sgmlin
@@ -179,6 +179,9 @@ ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> query planner, refer to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> query planner, refer to
+<!## end>
<xref linkend="planner-stats">.
</para>
</listitem>
@@ -216,6 +219,9 @@ ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
<!## XC>
of statistics by the <productname>Postgres-XC</productname> query
<!## end>
+<!## XL>
+ of statistics by the <productname>Postgres-XL</productname> query
+<!## end>
planner, refer to <xref linkend="planner-stats">.
</para>
</listitem>
@@ -681,6 +687,110 @@ ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><literal>DISTRIBUTE BY</literal></term>
+ <listitem>
+&xlonly;
+ <para>
+ This clause specifies how the table is distributed or replicated among Datanodes.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><literal>REPLICATION</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be replicated into all the
+ Datanodes of the <productname>Postgres-XL</> database
+ cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>ROUNDROBIN</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed in one of the Datanodes
+ by round-robin manner. The value of the row will not be
+ needed to determine what Datanode to go.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>HASH ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the hash value
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>MODULO ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the modulo
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>TO GROUP</literal></term>
+ <term><literal>TO NODE</literal></term>
+ <listitem>
+ <para>
+ This defines the list of nodes on which table data exists.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>ADD NODE</literal></term>
+ <listitem>
+ <para>
+ This adds a list of nodes where data of table is distributed
+ to the existing list. If the list of nodes added contains nodes
+ already used by table, an error is returned.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>DELETE NODE</literal></term>
+ <listitem>
+ <para>
+ This deletes a list of nodes where data of table is distributed
+ to the existing list. If the list of nodes deleted contains nodes
+ not used by table, an error is returned.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
</variablelist>
</para>
@@ -918,6 +1028,26 @@ ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
</varlistentry>
</variablelist>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><replaceable class="PARAMETER">nodename</replaceable></term>
+ <listitem>
+ <para>
+ It defines a <productname>Postgres-XL</productname> node of catalog pgxc_node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="PARAMETER">groupname</replaceable></term>
+ <listitem>
+ <para>
+ It defines a <productname>Postgres-XL</productname> node group in catalog pgxc_group.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+<!## end>
</refsect1>
<refsect1>
@@ -1099,6 +1229,76 @@ ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
</variablelist>
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>ALTER TABLE</> with clauses <literal>DISTRIBUTE BY</>, <literal>ADD NODE</>,
+ <literal>DELETE NODE</>, <literal>TO NODE</> or <literal>TO GROUP</> is used for data
+ redistribution among nodes specific to <productname>Postgres-XL</>. Those clauses cannot be
+ used with other commands.
+ </para>
+
+ <para>
+ Multiple redistribution scenarios are possible depending on modifications done:
+ <variablelist>
+ <varlistentry>
+ <term>Default redistribution:</term>
+ <listitem>
+ <para>
+ This is the slowest scenario possible. It is done in 3 or 4 steps. Data is firstly
+ saved on Coordinator by fetching all the data with <command>COPY TO</> command. At
+ this point all the tuples are saved using tuple store. The amount of cache allowed for
+ tuple store operation can be controlled with <varname>work_mem</>. Then the table is
+ truncated on all the nodes. Then catalogs are updated. Finally data inside tuple store
+ is redistributed using an internal <command>COPY FROM</> mechanism. <command>REINDEX</>
+ is issued if necessary. The overall performance of this scenario is close to the
+ time necessary to run consecutively <command>COPY TO</> and <command>COPY FROM</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Redistribution from replicated to replicated table:</term>
+ <listitem>
+ <para>
+ The node list of a table can have new nodes as well as removed nodes.
+ If nodes are only removed, <command>TRUNCATE</> is launched to remote nodes that are
+ removed. If new nodes are added, then table data is fetch on Coordinator with <command>
+ COPY TO</> and stored inside a tuplestore controlled with <varname>work_mem</>, then
+ data stored is only sent to the new nodes using <command>COPY FROM</> with data stored
+ inside the tuplestore. <command>REINDEX</> is issued if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Redistribution from replicated to distributed table:</term>
+ <listitem>
+ <para>
+ If the relation node list contains new nodes, the default redistribution
+ mechanism is used. However, if the node list of relation after redistribution is
+ included in node list of relation after redistribution, as all the tuples are already
+ located on remote nodes, it is not necessary to fetch any data on Coordinator. Hence,
+ <command>DELETE</> is used to remove on remote nodes only the necessary tuples. This
+ query uses selects tuples to remove with conditions based on the number of nodes in node
+ list of relation after redistribution, the <literal>HASH</> or <literal>MODULO</> value
+ used for new distribution and the remote node itself where <command>DELETE</> is launched..
+ <command>REINDEX</> is issued if necessary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Redistribution from distributed to replicated table:</term>
+ <listitem>
+ <para>
+ In this case the default redistribution mechanism is used.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -1267,6 +1467,29 @@ ALTER TABLE distributors DELETE NODE (dn4, dn0);
</programlisting>
</para>
<!## end>
+<!## XL>
+ <para>
+ To change the distribution type and the list of nodes where table data
+ is located:
+<programlisting>
+ALTER TABLE distributors TO NODE (dn1, dn7), DISTRIBUTE BY HASH(dist_id);
+</programlisting>
+ </para>
+
+ <para>
+ To add a node where data of table is distributed:
+<programlisting>
+ALTER TABLE distributors ADD NODE (dn9, dn14);
+</programlisting>
+ </para>
+
+ <para>
+ To remove a node where data of table is distributed:
+<programlisting>
+ALTER TABLE distributors DELETE NODE (dn4, dn0);
+</programlisting>
+ </para>
+<!## end>
</refsect1>
@@ -1284,6 +1507,9 @@ ALTER TABLE distributors DELETE NODE (dn4, dn0);
<!## XC>
<productname>Postgres-XC</productname> extensions of the SQL standard.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions of the SQL standard.
+<!## end>
Also, the ability to specify more than one manipulation in a single
<command>ALTER TABLE</> command is an extension.
</para>
diff --git a/doc-xc/src/sgml/ref/alter_trigger.sgmlin b/doc-xc/src/sgml/ref/alter_trigger.sgmlin
index 2f943ee9c2..36a9de3096 100644
--- a/doc-xc/src/sgml/ref/alter_trigger.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_trigger.sgmlin
@@ -28,6 +28,23 @@ ALTER TRIGGER <replaceable class="PARAMETER">name</replaceable> ON <replaceable
<refsect1>
<title>Description</title>
+<!## XC>
+&xconly;
+ <para>
+ <command>ALTER TRIGGERXS</> statement has not been supported
+ in <productname>Postgres-XC</> yet.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <command>ALTER TRIGGER</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
+
+<!## PG>
+
<para>
<command>ALTER TRIGGER</command> changes properties of an existing
trigger. The <literal>RENAME</literal> clause changes the name of
@@ -103,6 +120,7 @@ ALTER TRIGGER emp_stamp ON emp RENAME TO emp_track_chgs;
<command>ALTER TRIGGER</command> is a <productname>PostgreSQL</>
extension of the SQL standard.
</para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_user.sgmlin b/doc-xc/src/sgml/ref/alter_user.sgmlin
index 69e6e65006..2ffd166ddb 100644
--- a/doc-xc/src/sgml/ref/alter_user.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_user.sgmlin
@@ -67,6 +67,9 @@ ALTER USER <replaceable class="PARAMETER">name</replaceable> RESET ALL
<!## XC>
<productname>Postgres-XC</productname> extension. The SQL standard
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. The SQL standard
+<!## end>
leaves the definition of users to the implementation.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/alter_user_mapping.sgmlin b/doc-xc/src/sgml/ref/alter_user_mapping.sgmlin
index 711012d471..936041b64d 100644
--- a/doc-xc/src/sgml/ref/alter_user_mapping.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_user_mapping.sgmlin
@@ -37,6 +37,14 @@ ALTER USER MAPPING FOR { <replaceable class="parameter">user_name</replaceable>
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>USER MAPPING</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/alter_view.sgmlin b/doc-xc/src/sgml/ref/alter_view.sgmlin
index fc6d776225..8c19671265 100644
--- a/doc-xc/src/sgml/ref/alter_view.sgmlin
+++ b/doc-xc/src/sgml/ref/alter_view.sgmlin
@@ -139,6 +139,9 @@ ALTER VIEW foo RENAME TO bar;
<!## XC>
<command>ALTER VIEW</command> is a <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <command>ALTER VIEW</command> is a <productname>Postgres-XL</>
+<!## end>
extension of the SQL standard.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/begin.sgmlin b/doc-xc/src/sgml/ref/begin.sgmlin
index c765227f90..e4581503b5 100644
--- a/doc-xc/src/sgml/ref/begin.sgmlin
+++ b/doc-xc/src/sgml/ref/begin.sgmlin
@@ -47,6 +47,9 @@ BEGIN [ WORK | TRANSACTION ] [ <replaceable class="parameter">transaction_mode</
<!## XC>
<productname>Postgres-XC</productname> executes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> executes
+<!## end>
transactions in <quote>autocommit</quote> mode, that is, each
statement is executed in its own transaction and a commit is
implicitly performed at the end of the statement (if execution was
@@ -141,6 +144,9 @@ BEGIN;
<!## XC>
<command>BEGIN</command> is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <command>BEGIN</command> is a <productname>Postgres-XL</productname>
+<!## end>
language extension. It is equivalent to the SQL-standard command
<xref linkend="sql-start-transaction">, whose reference page
contains additional compatibility information.
diff --git a/doc-xc/src/sgml/ref/checkpoint.sgmlin b/doc-xc/src/sgml/ref/checkpoint.sgmlin
index f5932228ca..e673147f48 100644
--- a/doc-xc/src/sgml/ref/checkpoint.sgmlin
+++ b/doc-xc/src/sgml/ref/checkpoint.sgmlin
@@ -60,6 +60,13 @@ CHECKPOINT
performed at local Coordinator and allthe underlying Datanodes.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postrgres-XL</>, <command>CHECKPOINT</> is
+ performed at local Coordinator and all of the underlying Datanodes.
+ </para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/clean_connection.sgmlin b/doc-xc/src/sgml/ref/clean_connection.sgmlin
index 77b55a6a08..f2c75ef17d 100644
--- a/doc-xc/src/sgml/ref/clean_connection.sgmlin
+++ b/doc-xc/src/sgml/ref/clean_connection.sgmlin
@@ -29,12 +29,12 @@ CLEAN CONNECTION TO { COORDINATOR ( <replaceable class="parameter">nodename</rep
<refsect1>
<title>Description</title>
-&xconly;
+&xlonly;
<para>
- <command>CLEAN CONNECTION</command> cleans pooler connection in
- a Postgres-XC cluster. This can be done for a give database or
- role. This command usage is restricted to superusers. It is
- possible to clean connections to a list of Postgres-XC Coordinators
+ <command>CLEAN CONNECTION</command> cleans pooler connections in
+ a Postgres-XL cluster. This can be done for a given database or
+ role. This command's usage is restricted to superusers. It is
+ possible to clean connections to a list of Postgres-XL Coordinators
or Datanodes. If TO ALL is specified, connections to all the nodes
are cleaned. A <replaceable class="parameter">username</replaceable>
or a <replaceable class="parameter">dbname</replaceable> has to be
@@ -108,15 +108,6 @@ CLEAN CONNECTION TO COORDINATOR coord1,coord2 FOR DATABASE<replaceable>name</rep
</refsect1>
<refsect1>
- <title>Notes</title>
-
- <para>
- <command>CLEAN CONNECTION</command> is implemented since Postgres-XC
- 0.9.3.
- </para>
- </refsect1>
-
- <refsect1>
<title>Examples</title>
<para>
@@ -146,7 +137,7 @@ CLEAN CONNECTION TO ALL FORCE FOR DATABASE postgres TO USER admin;
<title>Compatibility</title>
<para>
<command>CLEAN CONNECTION</command> does not conform to the <acronym>
- SQL</acronym> standards, it is a Postgres-XC specific command.
+ SQL</acronym> standards, it is a Postgres-XL specific command.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/cluster.sgmlin b/doc-xc/src/sgml/ref/cluster.sgmlin
index 7b7c4270ee..a754a0503c 100644
--- a/doc-xc/src/sgml/ref/cluster.sgmlin
+++ b/doc-xc/src/sgml/ref/cluster.sgmlin
@@ -37,6 +37,9 @@ CLUSTER [VERBOSE]
<!## XC>
<command>CLUSTER</command> instructs <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <command>CLUSTER</command> instructs <productname>Postgres-XL</productname>
+<!## end>
to cluster the table specified
by <replaceable class="parameter">table_name</replaceable>
based on the index specified by
@@ -64,6 +67,9 @@ CLUSTER [VERBOSE]
<!## XC>
When a table is clustered, <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ When a table is clustered, <productname>Postgres-XL</productname>
+<!## end>
remembers which index it was clustered by. The form
<command>CLUSTER <replaceable class="parameter">table_name</replaceable></command>
reclusters the table using the same index as before. You can also
@@ -94,6 +100,13 @@ CLUSTER [VERBOSE]
executed on all the Datanodes as well.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, <command>CLUSTER</> will be
+ executed on all the Datanodes as well.
+ </para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/commit_prepared.sgmlin b/doc-xc/src/sgml/ref/commit_prepared.sgmlin
index b76831d9bf..cdbf7bf754 100644
--- a/doc-xc/src/sgml/ref/commit_prepared.sgmlin
+++ b/doc-xc/src/sgml/ref/commit_prepared.sgmlin
@@ -81,6 +81,18 @@ COMMIT PREPARED <replaceable class="PARAMETER">transaction_id</replaceable>
If <literal>xc_maintenance_mode</literal> GUC parameter is set to <literal>ON</literal>, <command>COMMIT PREPARED</command> will not propagate to other nodes. It just runs locally and report the result to <literal>GTM</literal>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If more than one Datanode and/or Coordinator are involved in the
+ transaction, <command>COMMIT PREPARED</> command will propagate to
+ all these nodes.
+ </para>
+&xlonly;
+ <para>
+ If <literal>xc_maintenance_mode</literal> GUC parameter is set to <literal>ON</literal>, <command>COMMIT PREPARED</command> will not propagate to other nodes. It just runs locally and report the result to <literal>GTM</literal>.
+ </para>
+<!## end>
</refsect1>
<refsect1 id="sql-commit-prepared-examples">
@@ -105,6 +117,9 @@ COMMIT PREPARED 'foobar';
<!## XC>
<member><xref linkend="guc-xc-maintenance-mode"></member>
<!## end>
+<!## XL>
+ <member><xref linkend="guc-xc-maintenance-mode"></member>
+<!## end>
</simplelist>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/copy.sgmlin b/doc-xc/src/sgml/ref/copy.sgmlin
index f39bbd4625..14f9df52ec 100644
--- a/doc-xc/src/sgml/ref/copy.sgmlin
+++ b/doc-xc/src/sgml/ref/copy.sgmlin
@@ -58,6 +58,9 @@ COPY { <replaceable class="parameter">table_name</replaceable> [ ( <replaceable
<!## XC>
<productname>Postgres-XC</productname> tables and standard file-system
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> tables and standard file-system
+<!## end>
files. <command>COPY TO</command> copies the contents of a table
<emphasis>to</> a file, while <command>COPY FROM</command> copies
data <emphasis>from</> a file to a table (appending the data to
@@ -81,6 +84,9 @@ COPY { <replaceable class="parameter">table_name</replaceable> [ ( <replaceable
<!## XC>
<productname>Postgres-XC</productname> server to directly read from
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server to directly read from
+<!## end>
or write to a file. The file must be accessible to the server and
the name must be specified from the viewpoint of the server. When
<literal>STDIN</literal> or <literal>STDOUT</literal> is
@@ -197,6 +203,14 @@ COPY { <replaceable class="parameter">table_name</replaceable> [ ( <replaceable
may conflict if you copy this value to another table.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, OIDs are only maintained locally
+ in Coordinators and Datanodes. The value of <literal>OIDs</>
+ may conflict if you copy this value to another table.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -370,6 +384,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
by the <productname>Postgres-XC</productname> user (the user ID the
<!## end>
+<!## XL>
+ by the <productname>Postgres-XL</productname> user (the user ID the
+<!## end>
server runs as), not the client. <command>COPY</command> naming a
file is only allowed to database superusers, since it allows reading
or writing any file that the server has privileges to access.
@@ -410,6 +427,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</productname> installations that might use
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> installations that might use
+<!## end>
non-default <varname>DateStyle</varname> settings,
<varname>DateStyle</varname> should be set to <literal>ISO</> before
using <command>COPY TO</>. It is also a good idea to avoid dumping
@@ -592,6 +612,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</productname>'s standard text format, it
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s standard text format, it
+<!## end>
produces and recognizes the common CSV escaping mechanism.
</para>
@@ -616,6 +639,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</>'s <command>COPY</> handles this by quoting.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s <command>COPY</> handles this by quoting.
+<!## end>
A <literal>NULL</> is output as the <literal>NULL</> parameter string
and is not quoted, while a non-<literal>NULL</> value matching the
<literal>NULL</> parameter string is quoted. For example, with the
@@ -653,6 +679,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</para>
</note>
@@ -691,6 +720,9 @@ COPY <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</productname> versions.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> versions.
+<!## end>
Also, the binary format is very data type specific; for example
it will not work to output binary data from a <type>smallint</> column
and read it into an <type>integer</> column, even though that would work
@@ -818,6 +850,9 @@ should consult the <productname>PostgreSQL</productname> source, in
<!## XC>
should consult the <productname>Postgres-XC</productname> source, in
<!## end>
+<!## XL>
+should consult the <productname>Postgres-XL</productname> source, in
+<!## end>
particular the <function>*send</> and <function>*recv</> functions for
each column's data type (typically these functions are found in the
<filename>src/backend/utils/adt/</filename> directory of the source
diff --git a/doc-xc/src/sgml/ref/create_aggregate.sgmlin b/doc-xc/src/sgml/ref/create_aggregate.sgmlin
index 2de3015d87..4346596e54 100644
--- a/doc-xc/src/sgml/ref/create_aggregate.sgmlin
+++ b/doc-xc/src/sgml/ref/create_aggregate.sgmlin
@@ -66,13 +66,35 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
)
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> ( <replaceable class="PARAMETER">input_data_type</replaceable> [ , ... ] ) (
+ SFUNC = <replaceable class="PARAMETER">sfunc</replaceable>,
+ STYPE = <replaceable class="PARAMETER">state_data_type</replaceable>
+ [ , CFUNC = <replaceable class="PARAMETER">cfunc</replaceable> ]
+ [ , FINALFUNC = <replaceable class="PARAMETER">ffunc</replaceable> ]
+ [ , INITCOND = <replaceable class="PARAMETER">initial_condition</replaceable> ]
+ [ , INITCOLLECT = <replaceable class="PARAMETER">initial_collection_condition</replaceable> ]
+ [ , SORTOP = <replaceable class="PARAMETER">sort_operator</replaceable> ]
+)
+
+<phrase>or the old syntax</phrase>
+
+CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
+ BASETYPE = <replaceable class="PARAMETER">base_type</replaceable>,
+ SFUNC = <replaceable class="PARAMETER">sfunc</replaceable>,
+ STYPE = <replaceable class="PARAMETER">state_data_type</replaceable>
+ [ , FINALFUNC = <replaceable class="PARAMETER">ffunc</replaceable> ]
+ [ , INITCOND = <replaceable class="PARAMETER">initial_condition</replaceable> ]
+ [ , SORTOP = <replaceable class="PARAMETER">sort_operator</replaceable> ]
+)
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
-&xconly;
-
<para>
<command>CREATE AGGREGATE</command> defines a new aggregate
function. Some basic and commonly-used aggregate functions are
@@ -97,12 +119,15 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
schema.
</para>
-&xconly;
<para>
<!## PG>
An aggregate function is made from one or two ordinary
<!## end>
<!## XC>
+&xconly;
+ An aggregate function is made from one to maximum 3 ordinary
+<!## end>
+<!## XL>
An aggregate function is made from one to maximum 3 ordinary
<!## end>
functions:
@@ -112,6 +137,10 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
an optional collection function
<replaceable class="PARAMETER">cfunc</replaceable>,
<!## end>
+<!## XL>
+ an optional collection function
+ <replaceable class="PARAMETER">cfunc</replaceable>,
+<!## end>
and an optional final calculation function
<replaceable class="PARAMETER">ffunc</replaceable>.
These are used as follows:
@@ -128,6 +157,13 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
<replaceable class="PARAMETER">ffunc</replaceable>( internal-state ) ---> aggregate-value
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+<replaceable class="PARAMETER">sfunc</replaceable>( internal-state, next-data-values ) ---> next-internal-state
+<replaceable class="PARAMETER">cfunc</replaceable>( internal-state, internal-state ) ---> next-internal-state
+<replaceable class="PARAMETER">ffunc</replaceable>( internal-state ) ---> aggregate-value
+</programlisting>
+<!## end>
</para>
<para>
@@ -144,6 +180,16 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
the Coordinator node. In first phase called transition phase,
<productname>Postgres-XC</productname> creates a temporary variable
<!## end>
+<!## XL>
+ In <productname>Postgres-XL</productname> the aggregation works in two
+ different modes.
+ <itemizedlist>
+ <listitem>
+ <para>
+ Two phased aggregation - is used when the entire aggregation takes place on
+ the Coordinator node. In first phase called transition phase,
+ <productname>Postgres-XL</productname> creates a temporary variable
+<!## end>
of data type <replaceable class="PARAMETER">stype</replaceable>
to hold the current internal state of the aggregate. At each input row,
the aggregate argument value(s) are calculated and
@@ -191,10 +237,45 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
aggregate. <productname>Postgres-XC</productname> planner chooses the cheapest
feasible mode of the above two, during planning.
<!## end>
+<!## XL>
+ internal state value. After all the rows have been processed, in the second
+ phase or finalization phase the final function is invoked once to calculate
+ the aggregate's return value. If there is no final function then the ending
+ state value is returned as-is.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Three phased aggregation - is used when the process of aggregation is divided
+ between Coordinator and Datanodes. In this mode, each
+ <productname>Postgres-XL</productname> Datanode involved in the query carries
+ out the first phase named transition phase. This phase is similar to the first
+ phase in the two phased aggregation mode discussed above, except that, every
+ Datanode applies this phase on the rows available at the Datanode. The
+ result of transition phase is then transferred to the Coordinator node.
+ Second phase called collection phase takes place on the Coordinator.
+ <productname>Postgres-XL</productname> Coordinator node creates a temporary variable
+ of data type <replaceable class="PARAMETER">stype</replaceable>
+ to hold the current internal state of the collection phase. For every input
+ from the Datanode (result of transition phase on that node), the collection
+ function is invoked with the current collection state value and the new
+ transition value (obtained from the Datanode) to calculate a new
+ internal collection state value. After all the transition values from data
+ nodes have been processed, in the third or finalization phase the final
+ function is invoked once to calculate the aggregate's return
+ value. If there is no final function then the ending collection state value
+ is returned as-is.
+ </para>
+ </listitem>
+ </itemizedlist>
+ Irrespective of the mode used for aggregation, the result of aggregation
+ should be same if the same set of data rows is participating in the
+ aggregate. <productname>Postgres-XL</productname> planner chooses the cheapest
+ feasible mode of the above two, during planning.
+<!## end>
</para>
-&xconly;
<para>
An aggregate function can provide an initial condition,
<!## PG>
@@ -205,6 +286,11 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
that is, an initial value for the internal transition or collection state
value. This is specified and stored in the database as a value of type
<!## end>
+<!## XL>
+&xlonly;
+ that is, an initial value for the internal transition or collection state
+ value. This is specified and stored in the database as a value of type
+<!## end>
<type>text</type>, but it must be a valid external representation
of a constant of the state value data type. If it is not supplied
then the state value starts out null.
@@ -251,6 +337,47 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
author to have full control over the aggregate's handling of null values.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If the collection function is declared <quote>strict</quote>,
+ then it cannot be called with null inputs. With such a collection
+ function, aggregate execution behaves as follows. Null state transition
+ results are ignored (the function is not called and the previous collection
+ state value is retained). If the initial state value is null, then at the
+ first non-null state transition result replaces the collection state
+ value, and the collection function is invoked at subsequent rows with
+ all-nonnull transition values.
+ This is handy for implementing aggregates like <function>max</function>.
+ </para>
+<!## end>
+
+ <para>
+ If the state transition function is declared <quote>strict</quote>,
+ then it cannot be called with null inputs. With such a transition
+ function, aggregate execution behaves as follows. Rows with any null input
+ values are ignored (the function is not called and the previous state value
+ is retained). If the initial state value is null, then at the first row
+ with all-nonnull input values, the first argument value replaces the state
+ value, and the transition function is invoked at subsequent rows with
+ all-nonnull input values.
+ This is handy for implementing aggregates like <function>max</function>.
+ Note that this behavior is only available when
+ <replaceable class="PARAMETER">state_data_type</replaceable>
+ is the same as the first
+ <replaceable class="PARAMETER">input_data_type</replaceable>.
+ When these types are different, you must supply a nonnull initial
+ condition or use a nonstrict transition function.
+ </para>
+
+<!## PG>
+ <para>
+ If the state transition function is not strict, then it will be called
+ unconditionally at each input row, and must deal with null inputs
+ and null transition values for itself. This allows the aggregate
+ author to have full control over the aggregate's handling of null values.
+ </para>
+<!## end>
<!## XC>
&xconly;
<para>
@@ -261,6 +388,16 @@ CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> (
values.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If the state transition and/or collection function is not strict, then it
+ will be called unconditionally at each input row, and must deal with null
+ inputs and null transition/collection values for itself. This allows the
+ aggregate author to have full control over the aggregate's handling of null
+ values.
+ </para>
+<!## end>
<para>
If the final function is declared <quote>strict</quote>, then it will not
@@ -381,6 +518,28 @@ SELECT col FROM tab ORDER BY col USING sortop LIMIT 1;
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><replaceable class="PARAMETER">cfunc</replaceable></term>
+ <listitem>
+&xlonly;
+ <para>
+ The name of the state collection function to be called for each
+ input row. The <replaceable class="PARAMETER">sfunc</> must
+ take <replaceable class="PARAMETER">2 arguments</replaceable>, both of them
+ being of
+ type <replaceable class="PARAMETER">state_data_type</replaceable>.
+ The function must return a value of
+ type <replaceable class="PARAMETER">state_data_type</replaceable>.
+ This function takes the current collection state value and the
+ current transition value, and returns the next collection state
+ value. If cfunc is omitted for an aggregate, the two phase
+ aggregation mode is used for that aggregate. All the aggregates
+ involed in a query use the same aggregation mode.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><replaceable class="PARAMETER">state_data_type</replaceable></term>
@@ -439,6 +598,23 @@ SELECT col FROM tab ORDER BY col USING sortop LIMIT 1;
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><replaceable class="PARAMETER">initial_collection_condition</replaceable></term>
+ <listitem>
+&xlonly;
+ <para>
+ The initial setting for the state collection value. This must
+ be a string constant in the form accepted for the data
+ type <replaceable class="PARAMETER">state_data_type</replaceable>.
+ If not specified, the collection state value starts out null. If
+ the collection
+ function <replaceable class="PARAMETER">cfunc</replaceable> is
+ not supplied, this parameter is stored but not used.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><replaceable class="PARAMETER">sort_operator</replaceable></term>
@@ -481,6 +657,9 @@ SELECT col FROM tab ORDER BY col USING sortop LIMIT 1;
<!## XC>
<productname>Postgres-XC</productname> language extension. The SQL
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> language extension. The SQL
+<!## end>
standard does not provide for user-defined aggregate functions.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_barrier.sgmlin b/doc-xc/src/sgml/ref/create_barrier.sgmlin
index e0b3e5eea5..8e23be536b 100644
--- a/doc-xc/src/sgml/ref/create_barrier.sgmlin
+++ b/doc-xc/src/sgml/ref/create_barrier.sgmlin
@@ -53,3 +53,61 @@ CREATE BARRIER <replaceable class="PARAMETER">barrier_name</replaceable>
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-CREATEBARRIER">
+ <refmeta>
+ <refentrytitle>CREATE BARRIER</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>CREATE BARRIER</refname>
+ <refpurpose>create a new barrier</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-createbarrier">
+ <primary>CREATE BARRIER</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+CREATE BARRIER <replaceable class="PARAMETER">barrier_name</replaceable>
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>CREATE BARRIER</command> is new SQL command specific
+ to <productname>Postgres-XL</productname> that creates
+ a new XLOG record on each node of the cluster consistently.
+ Essentially a barrier is a consistent point in the cluster that
+ you can recover to. Note that these are currently created manually,
+ not autoatically. Without barriers, if you recover an individual
+ component, it may be possible that it is not consistent with the
+ other nodes depending on when it was committed.
+ </para>
+ <para>A barrier
+ is created via a 2PC-like mechanism from a remote Coordinator in 3
+ phases with a prepare, execute and ending phases. A new recovery
+ parameter called recovery_target_barrier has been added in
+ recovery.conf. In order to perform a complete PITR recovery, it is
+ necessary to set recovery_target_barrier to the value of a barrier
+ already created. Then distribute recovery.conf to each data folder
+ of each node, and then to restart the nodes one by one.
+ </para>
+
+ <para>
+ The default barrier name is <literal>dummy_barrier_id</literal>. It is
+ used when no barrier name is specified when using <command>CREATE
+ BARRIER</command>.
+ </para>
+
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/create_cast.sgmlin b/doc-xc/src/sgml/ref/create_cast.sgmlin
index b97466fa6e..f7293498ea 100644
--- a/doc-xc/src/sgml/ref/create_cast.sgmlin
+++ b/doc-xc/src/sgml/ref/create_cast.sgmlin
@@ -142,6 +142,9 @@ SELECT CAST ( 2 AS numeric ) + 4.0;
<!## XC>
<productname>Postgres-XC</productname> to choose surprising
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> to choose surprising
+<!## end>
interpretations of commands, or to be unable to resolve commands at
all because there are multiple possible interpretations. A good
rule of thumb is to make a cast implicitly invokable only for
@@ -323,6 +326,9 @@ SELECT CAST ( 2 AS numeric ) + 4.0;
<!## XC>
are defined to be in the string category). <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ are defined to be in the string category). <productname>Postgres-XL</>
+<!## end>
provides automatic I/O conversion casts for that. The automatic casts to
string types are treated as assignment casts, while the automatic casts
from string types are
@@ -363,6 +369,9 @@ SELECT CAST ( 2 AS numeric ) + 4.0;
<!## XC>
Since <productname>Postgres-XC</> allows overloading of the same function
<!## end>
+<!## XL>
+ Since <productname>Postgres-XL</> allows overloading of the same function
+<!## end>
name with different argument types, there is no difficulty in having
multiple conversion functions from different types that all use the
target type's name.
@@ -428,6 +437,9 @@ CREATE CAST (bigint AS int4) WITH FUNCTION int4(bigint) AS ASSIGNMENT;
<!## XC>
<literal>AS IMPLICIT</> is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <literal>AS IMPLICIT</> is a <productname>Postgres-XL</productname>
+<!## end>
extension, too.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_conversion.sgmlin b/doc-xc/src/sgml/ref/create_conversion.sgmlin
index 63b86bcf1d..59fa1bcd53 100644
--- a/doc-xc/src/sgml/ref/create_conversion.sgmlin
+++ b/doc-xc/src/sgml/ref/create_conversion.sgmlin
@@ -159,6 +159,9 @@ CREATE CONVERSION myconv FOR 'UTF8' TO 'LATIN1' FROM myfunc;
<!## XC>
is a <productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ is a <productname>Postgres-XL</productname> extension.
+<!## end>
There is no <command>CREATE CONVERSION</command>
statement in the SQL standard, but a <command>CREATE TRANSLATION</command>
statement that is very similar in purpose and syntax.
diff --git a/doc-xc/src/sgml/ref/create_database.sgmlin b/doc-xc/src/sgml/ref/create_database.sgmlin
index dd6d17930b..99a2a75693 100644
--- a/doc-xc/src/sgml/ref/create_database.sgmlin
+++ b/doc-xc/src/sgml/ref/create_database.sgmlin
@@ -45,6 +45,9 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> database.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database.
+<!## end>
</para>
<para>
@@ -74,6 +77,9 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
<!## XC>
version of <productname>Postgres-XC</productname>. This is useful
<!## end>
+<!## XL>
+ version of <productname>Postgres-XL</productname>. This is useful
+<!## end>
if you wish to avoid copying
any installation-local objects that might have been added to
<literal>template1</>.
@@ -88,6 +94,15 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
CONNECTION</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If there are any live connections to any one of the template databases in
+ a Coordinator or Datanode, you will receive an error message. In this
+ case, you should clean these connections using <command>CLEAN
+ CONNECTION</> statement.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -137,6 +152,9 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> server are described in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server are described in
+<!## end>
<xref linkend="multibyte-charset-supported">. See below for
additional restrictions.
</para>
diff --git a/doc-xc/src/sgml/ref/create_foreign_data_wrapper.sgmlin b/doc-xc/src/sgml/ref/create_foreign_data_wrapper.sgmlin
index 63e0bfbd5c..42c26bd840 100644
--- a/doc-xc/src/sgml/ref/create_foreign_data_wrapper.sgmlin
+++ b/doc-xc/src/sgml/ref/create_foreign_data_wrapper.sgmlin
@@ -38,6 +38,14 @@ CREATE FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable>
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>FOREIGN DATA WRAPPER</> has not been supported
+ by <productname>Postgres-XL</> yet. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/create_function.sgmlin b/doc-xc/src/sgml/ref/create_function.sgmlin
index f8a8ab9ff2..0c60183020 100644
--- a/doc-xc/src/sgml/ref/create_function.sgmlin
+++ b/doc-xc/src/sgml/ref/create_function.sgmlin
@@ -46,7 +46,7 @@ CREATE [ OR REPLACE ] FUNCTION
<note>
<para>
<productname>Postgres-XC</> currently does not support creation of SQL functions
- containing utility statemets. This limitation is however enforced only when the
+ containing utility statements. This limitation is however enforced only when the
GUC <varname>check_function_bodies</varname> is <literal>on</>.
If SQL functions are created after setting <varname>check_function_bodies</varname> to <literal>off</>,
the behaviour of the function when executed is un-defined.
@@ -55,6 +55,34 @@ CREATE [ OR REPLACE ] FUNCTION
</para>
</note>
<!## end>
+<!## XL>
+ <note>
+ <para>
+ <productname>Postgres-XL</> function usage currently requires a lot of care,
+ otherwise unexepected results may occur, and you may bring your data in an inconsistent state.
+ This behavior may change in a future version to make it safer.
+ </para>
+
+ <para>
+ A call such as <literal>SELECT my_function(1,2);</>, without any FROM clause,
+ will execute on a local coordinator, and
+ may involve other datanodes and behave as expected, being driven from a coordinator.
+ </para>
+
+ <para>
+ A call such as <literal>SELECT col1, my_table_function(col2) FROM mytable</> will be
+ pushed down to the datanodes involved. If <literal>my_table_function</> happens to
+ do a SELECT, it will only be from data local to that node. Similarly, if it
+ executes an UPDATE, it will only update data local to that node.
+ If the UPDATE writes to a replicated table for example, it would mean that
+ the tables would be out of sync.
+ </para>
+
+ <para>
+ In summary, one should be very careful in creating and using functions in Postgres-XL.
+ </para>
+ </note>
+<!## end>
<para>
@@ -496,6 +524,13 @@ CREATE [ OR REPLACE ] FUNCTION
servers where Coordinator or Datanode may run.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ It is user's responsibility to deploy the file to all the
+ servers where Coordinator or Datanode may run.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -555,6 +590,9 @@ CREATE [ OR REPLACE ] FUNCTION
<!## XC>
<productname>Postgres-XC</productname> allows function
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows function
+<!## end>
<firstterm>overloading</firstterm>; that is, the same name can be
used for several different functions so long as they have distinct
input argument types. However, the C names of all functions must be
@@ -759,6 +797,9 @@ COMMIT;
<!## XC>
The <productname>Postgres-XC</productname> version is similar but
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> version is similar but
+<!## end>
not fully compatible. The attributes are not portable, neither are the
different available languages.
</para>
diff --git a/doc-xc/src/sgml/ref/create_index.sgmlin b/doc-xc/src/sgml/ref/create_index.sgmlin
index 6ee1c39bf8..6106032f12 100644
--- a/doc-xc/src/sgml/ref/create_index.sgmlin
+++ b/doc-xc/src/sgml/ref/create_index.sgmlin
@@ -7,6 +7,11 @@ PostgreSQL documentation
CONCURRENTLY not supported yet.
-->
<!## end>
+<!## XL>
+<!-- NOTICE:
+ CONCURRENTLY not supported yet.
+-->
+<!## end>
<refentry id="SQL-CREATEINDEX">
<refmeta>
@@ -43,6 +48,15 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
[ WHERE <replaceable class="parameter">predicate</replaceable> ]
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON <replaceable class="parameter">table</replaceable> [ USING <replaceable class="parameter">method</replaceable> ]
+ ( { <replaceable class="parameter">column</replaceable> | ( <replaceable class="parameter">expression</replaceable> ) } [ <replaceable class="parameter">opclass</replaceable> ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
+ [ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> = <replaceable class="PARAMETER">value</replaceable> [, ... ] ) ]
+ [ TABLESPACE <replaceable class="parameter">tablespace</replaceable> ]
+ [ WHERE <replaceable class="parameter">predicate</replaceable> ]
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -93,6 +107,19 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
the column value outside Coordinator or Datanode.
</para>
<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</productname> inherits the index methods
+ B-tree, hash, GiST, and GIN from <productname>PostgreSQL</>. Users can also define their own index
+ methods, but that is fairly complicated.
+ </para>
+&xlonly;
+ <para>
+ Please note that indexes are maintained only locally in each
+ Coordinator and/or Datanodes. They do not have any information on
+ the column value outside Coordinator or Datanode.
+ </para>
+<!## end>
<para>
When the <literal>WHERE</literal> clause is present, a
@@ -155,6 +182,13 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
support <literal>CONCURRENTLY</literal> in the current release.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</productname> does not
+ support <literal>CONCURRENTLY</literal> in the current release.
+ </para>
+<!## end>
<!## PG>
<para>
When this option is used, <productname>PostgreSQL</> will build the
@@ -181,6 +215,9 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
<!## XC>
table. If the name is omitted, <productname>Postgres-XC</> chooses a
<!## end>
+<!## XL>
+ table. If the name is omitted, <productname>Postgres-XL</> chooses a
+<!## end>
suitable name based on the parent table's name and the indexed column
name(s).
</para>
@@ -407,6 +444,9 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
<!## XC>
Normally <productname>Postgres-XC</> locks the table to be indexed against
<!## end>
+<!## XL>
+ Normally <productname>Postgres-XL</> locks the table to be indexed against
+<!## end>
writes and performs the entire index build with a single scan of the
table. Other transactions can still read the table, but if they try to
insert, update, or delete rows in the table they will block until the
@@ -423,6 +463,9 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
<!## XC>
<productname>Postgres-XC</> supports building indexes without locking
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> supports building indexes without locking
+<!## end>
out writes. This method is invoked by specifying the
<literal>CONCURRENTLY</> option of <command>CREATE INDEX</>.
When this option is used,
@@ -432,6 +475,9 @@ CREATE [ UNIQUE ] INDEX [ <replaceable class="parameter">name</replaceable> ] ON
<!## XC>
<productname>Postgres-XC</> must perform two scans of the table, and in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> must perform two scans of the table, and in
+<!## end>
addition it must wait for all existing transactions that could potentially
use the index to terminate. Thus
this method requires more total work than a standard index build and takes
@@ -516,6 +562,9 @@ Indexes:
<!## XC>
<productname>Postgres-XC</productname>.) Only B-tree currently
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.) Only B-tree currently
+<!## end>
supports unique indexes.
</para>
@@ -564,6 +613,9 @@ Indexes:
<!## XC>
index creation time: <productname>Postgres-XC</productname> will use one
<!## end>
+<!## XL>
+ index creation time: <productname>Postgres-XL</productname> will use one
+<!## end>
of two different hash index creation methods depending on whether the
estimated index size is more or less than <varname>effective_cache_size</>.
For best results, make sure that this parameter is also set to something
@@ -585,6 +637,9 @@ Indexes:
<!## XC>
Prior releases of <productname>Postgres-XC</productname> also had an
<!## end>
+<!## XL>
+ Prior releases of <productname>Postgres-XL</productname> also had an
+<!## end>
R-tree index method. This method has been removed because
it had no significant advantages over the GiST method.
If <literal>USING rtree</> is specified, <command>CREATE INDEX</>
@@ -601,6 +656,15 @@ Indexes:
It is not possible to create concurrent index.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ With a hash or a round-robin table, it is forbidden to create an unique index.
+ </para>
+ <para>
+ It is not possible to create concurrent index.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -693,6 +757,9 @@ CREATE INDEX CONCURRENTLY sales_quantity_index ON sales_table (quantity);
<!## XC>
<productname>Postgres-XC</productname> language extension. There
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> language extension. There
+<!## end>
are no provisions for indexes in the SQL standard.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_language.sgmlin b/doc-xc/src/sgml/ref/create_language.sgmlin
index 779b9648e2..0ec3e84b01 100644
--- a/doc-xc/src/sgml/ref/create_language.sgmlin
+++ b/doc-xc/src/sgml/ref/create_language.sgmlin
@@ -40,6 +40,9 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<!## XC>
procedural language with a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ procedural language with a <productname>Postgres-XL</productname>
+<!## end>
database. Subsequently, functions and trigger procedures can be
defined in this new language.
</para>
@@ -75,6 +78,9 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<!## XC>
language, and the <productname>Postgres-XC</productname> servers consult
<!## end>
+<!## XL>
+ language, and the <productname>Postgres-XL</productname> servers consult
+<!## end>
the <link linkend="catalog-pg-pltemplate"><structname>pg_pltemplate</structname></link>
system catalog to determine the correct parameters. In the second form,
the user supplies the language parameters along with the language name.
@@ -98,6 +104,9 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<!## XC>
<productname>Postgres-XC</productname> superuser privilege to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> superuser privilege to
+<!## end>
register a new language. However, the owner of a database can register
a new language within that database if the language is listed in
the <structname>pg_pltemplate</structname> catalog and is marked
@@ -146,6 +155,9 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<!## XC>
<productname>Postgres-XC</productname> superuser privilege can
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> superuser privilege can
+<!## end>
use this language to create new functions.
</para>
</listitem>
@@ -194,6 +206,9 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<!## XC>
registered with <productname>Postgres-XC</productname> as a
<!## end>
+<!## XL>
+ registered with <productname>Postgres-XL</productname> as a
+<!## end>
function taking no arguments and returning the
<type>language_handler</type> type, a placeholder type that is
simply used to identify the function as a call handler.
@@ -351,6 +366,9 @@ CREATE LANGUAGE plsample
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_node.sgmlin b/doc-xc/src/sgml/ref/create_node.sgmlin
index 307f0f62c1..0b7e9fa993 100644
--- a/doc-xc/src/sgml/ref/create_node.sgmlin
+++ b/doc-xc/src/sgml/ref/create_node.sgmlin
@@ -88,7 +88,7 @@ CREATE NODE <replaceable class="parameter">nodename</replaceable> WITH
Defines if the cluster node is used as a primary node for replicated
write operations. A <replaceable class="parameter">boolean</replaceable>
value can be specified. In case no value is specified, <literal>PRIMARY</literal>
- acts like <literal>true</>.
+ acts like <literal>false</>.
</para>
<para>
To avoid deadlock and make update consistetnt, you should specify the same <literal>PRIMARY</literal>
@@ -104,7 +104,7 @@ CREATE NODE <replaceable class="parameter">nodename</replaceable> WITH
Defines if the cluster node is used as a preferred node for replicated
read operations if no node is determined. A <replaceable class="parameter">boolean</replaceable>
value can be specified. In case no value is specified, <literal>PREFERRED</literal>
- acts like <literal>true</>.
+ acts like <literal>false</>.
</para>
<para>
You can specify different <literal>PREFERRED</literal> node at different coordinator.
@@ -196,3 +196,198 @@ CREATE NODE node2 WITH (TYPE = 'datanode', HOST = '192.168.0.3', PORT = 8888, PR
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-CREATENODE">
+ <refmeta>
+ <refentrytitle>CREATE NODE</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>CREATE NODE</refname>
+ <refpurpose>create a new cluster node</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-createnode">
+ <primary>CREATE NODE</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+CREATE NODE <replaceable class="parameter">nodename</replaceable> WITH
+ (
+ [ TYPE = <replaceable class="parameter">nodetype</replaceable>,]
+ [ HOST = <replaceable class="parameter">hostname</replaceable>,]
+ [ PORT = <replaceable class="parameter">portnum</replaceable>,]
+ [ PRIMARY [ = <replaceable class="parameter">boolean</replaceable> ],]
+ [ PREFERRED [ = <replaceable class="parameter">boolean</replaceable> ] ]
+ )
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>CREATE NODE</command> is a SQL command specific
+ to <productname>Postgres-XL</productname> that creates
+ a new entry in catalog table pgxc_node with node data.
+ </para>
+ <para>
+ This node data is directly used by a Coordinator session and its
+ corresponding Datanode sessions when connecting
+ to build connection data to cluster nodes through <productname>Postgres-XL
+ </productname> pooler.
+ </para>
+ <para>
+ Node connection information is created on pooler only if it has not been
+ the case yet on Coordinator connected at the moment of connection.
+ </para>
+ <para>
+ <command>CREATE NODE</command> only runs on the local node where it is launched.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Parameters</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="parameter">nodename</replaceable></term>
+ <listitem>
+ <para>
+ The name of the selected cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>TYPE</literal></term>
+ <listitem>
+ <para>
+ The type of the cluster node. It is possible to specify
+ a Coordinator node or a Datanode node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>PRIMARY</literal></term>
+ <listitem>
+ <para>
+ Defines if the cluster node is used as a primary node for replicated
+ write operations. A <replaceable class="parameter">boolean</replaceable>
+ value can be specified. In case no value is specified, <literal>PRIMARY</literal>
+ acts like <literal>false</>.
+ </para>
+ <para>
+ To avoid deadlocks and make update consistent, you should specify the same <literal>PRIMARY</literal>
+ node at all the nodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>PREFERRED</literal></term>
+ <listitem>
+ <para>
+ Defines if the cluster node is used as a preferred node for replicated
+ read operations if no node is determined. A <replaceable class="parameter">boolean</replaceable>
+ value can be specified. In case no value is specified, <literal>PREFERRED</literal>
+ acts like <literal>false</>.
+ </para>
+ <para>
+ You can specify different <literal>PREFERRED</literal> node at different coordinator.
+ This parameter affects performance of your <literal>Postgres-XL</literal> cluster.
+ If you configure a datanode where you configure a coordinator,
+ you should specify <literal>PREFERRED</literal> for the coordinator to such a local datanode.
+ This will save network communication and improve cluster-wide performance.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">nodetype</replaceable></term>
+ <listitem>
+ <para>
+ The node type for given cluster node. Possible values are:
+ 'coordinator' for a Coordinator node and 'datanode' for a
+ Datanode node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">hostname</replaceable></term>
+ <listitem>
+ <para>
+ The hostname or IP used to connect to the cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">portnum</replaceable></term>
+ <listitem>
+ <para>
+ The port number used to connect to the cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Notes</title>
+ <para>
+ <replaceable class="parameter">nodename</replaceable> remains constant
+ as long as it is in use.
+ </para>
+
+ <para>
+ When using a cluster with 1 Coordinator and 1 Datanode on each server,
+ defining the local Datanode as <literal>PREFERRED</literal> can greatly
+ improve the performance of a system by avoiding any network overhead for
+ replicated reads, as in this case a local socket is used for communication
+ between nodes. This has even more effects when the application frequently uses
+ replicated tables for remote join operations and that those operations can
+ be operated on the local <literal>PREFERRED</literal> node.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+ <para>
+ Create a Coordinator node located on local machine using port 6543
+<programlisting>
+CREATE NODE node2 WITH (TYPE = 'coordinator', HOST = 'localhost', PORT = 6543);
+</programlisting>
+ </para>
+
+ <para>
+ Create a Datanode which is a preferred and primary node
+ located on remote machine with IP '192.168.0.3' on port 8888.
+<programlisting>
+CREATE NODE node2 WITH (TYPE = 'datanode', HOST = '192.168.0.3', PORT = 8888, PRIMARY, PREFERRED);
+</programlisting>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>CREATE NODE</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/create_nodegroup.sgmlin b/doc-xc/src/sgml/ref/create_nodegroup.sgmlin
index 4b085bd46d..d24bbccadf 100644
--- a/doc-xc/src/sgml/ref/create_nodegroup.sgmlin
+++ b/doc-xc/src/sgml/ref/create_nodegroup.sgmlin
@@ -98,3 +98,99 @@ CREATE NODE GROUP cluster_group WITH Datanode1, Datanode2;
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-CREATENODEGROUP">
+ <refmeta>
+ <refentrytitle>CREATE NODE GROUP</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>CREATE NODE GROUP</refname>
+ <refpurpose>create a group of cluster nodes</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-createnodegroup">
+ <primary>CREATE NODE GROUP</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+CREATE NODE GROUP <replaceable class="parameter">groupname</replaceable>
+WITH ( <replaceable class="parameter">nodename</replaceable> [, ... ] )
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>CREATE NODE GROUP</command> is a SQL command specific
+ to <productname>Postgres-XL</productname> that creates
+ node group information in catalog pgxc_group.
+ </para>
+
+ <para>
+ <command>CREATE NODE</command> only runs on the local node where it is launched.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Parameters</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="parameter">groupname</replaceable></term>
+ <listitem>
+ <para>
+ The name of the selected cluster node group.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">nodename</replaceable></term>
+ <listitem>
+ <para>
+ The name of a cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Notes</title>
+ <para>
+ A group of nodes works as an alias for node lists when defining tables
+ on sub-clusters. Only Datanode can be included in node groups.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+
+ <para>
+ Create a cluster node group made of nodes called Datanode1, Datanode2.
+<programlisting>
+CREATE NODE GROUP cluster_group WITH Datanode1, Datanode2;
+</programlisting>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>CREATE NODE GROUP</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a <productname>Postgres-XL</productname> specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/create_opclass.sgmlin b/doc-xc/src/sgml/ref/create_opclass.sgmlin
index 963eb1ca5a..4b60a0f609 100644
--- a/doc-xc/src/sgml/ref/create_opclass.sgmlin
+++ b/doc-xc/src/sgml/ref/create_opclass.sgmlin
@@ -311,6 +311,9 @@ CREATE OPERATOR CLASS gist__int_ops
<!## XC>
<productname>Postgres-XC</productname> extension. There is no
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. There is no
+<!## end>
<command>CREATE OPERATOR CLASS</command> statement in the SQL
standard.
</para>
diff --git a/doc-xc/src/sgml/ref/create_operator.sgmlin b/doc-xc/src/sgml/ref/create_operator.sgmlin
index d2677f4f38..0182130de7 100644
--- a/doc-xc/src/sgml/ref/create_operator.sgmlin
+++ b/doc-xc/src/sgml/ref/create_operator.sgmlin
@@ -75,6 +75,9 @@ CREATE OPERATOR <replaceable>name</replaceable> (
<!## XC>
This restriction allows <productname>Postgres-XC</productname> to
<!## end>
+<!## XL>
+ This restriction allows <productname>Postgres-XL</productname> to
+<!## end>
parse SQL-compliant commands without requiring spaces between tokens.
</para>
</listitem>
@@ -288,6 +291,9 @@ CREATE OPERATOR === (
<!## XC>
<productname>Postgres-XC</productname> extension. There are no
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. There are no
+<!## end>
provisions for user-defined operators in the SQL standard.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_opfamily.sgmlin b/doc-xc/src/sgml/ref/create_opfamily.sgmlin
index 77b5a928e3..d30e8e904c 100644
--- a/doc-xc/src/sgml/ref/create_opfamily.sgmlin
+++ b/doc-xc/src/sgml/ref/create_opfamily.sgmlin
@@ -106,6 +106,9 @@ CREATE OPERATOR FAMILY <replaceable class="parameter">name</replaceable> USING <
<!## XC>
<productname>Postgres-XC</productname> extension. There is no
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. There is no
+<!## end>
<command>CREATE OPERATOR FAMILY</command> statement in the SQL
standard.
</para>
diff --git a/doc-xc/src/sgml/ref/create_role.sgmlin b/doc-xc/src/sgml/ref/create_role.sgmlin
index ea7a5cfb6d..cfab8ce2db 100644
--- a/doc-xc/src/sgml/ref/create_role.sgmlin
+++ b/doc-xc/src/sgml/ref/create_role.sgmlin
@@ -57,6 +57,9 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
<!## XC>
<productname>Postgres-XC</productname> database cluster. A role is
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database cluster. A role is
+<!## end>
an entity that can own database objects and have database privileges;
a role can be considered a <quote>user</>, a <quote>group</>, or both
depending on how it is used. Refer to
@@ -372,6 +375,9 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
<!## XC>
compatibility: in prior releases of <productname>Postgres-XC</productname>,
<!## end>
+<!## XL>
+ compatibility: in prior releases of <productname>Postgres-XL</productname>,
+<!## end>
users always had access to all privileges of groups they were members of.
However, <literal>NOINHERIT</> provides a closer match to the semantics
specified in the SQL standard.
@@ -397,6 +403,9 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
<!## XC>
<productname>Postgres-XC</productname> includes a program <xref
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes a program <xref
+<!## end>
linkend="APP-CREATEUSER"> that has
the same functionality as <command>CREATE ROLE</command> (in fact,
it calls this command) but can be run from the command shell.
@@ -476,6 +485,9 @@ CREATE ROLE <replaceable class="PARAMETER">name</> [ WITH ADMIN <replaceable cla
<!## XC>
<productname>Postgres-XC</productname> extensions.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions.
+<!## end>
</para>
<para>
@@ -488,6 +500,9 @@ CREATE ROLE <replaceable class="PARAMETER">name</> [ WITH ADMIN <replaceable cla
<!## XC>
<productname>Postgres-XC</productname> we have chosen to unify
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> we have chosen to unify
+<!## end>
users and roles into a single kind of entity. Roles therefore
have many more optional attributes than they do in the standard.
</para>
diff --git a/doc-xc/src/sgml/ref/create_rule.sgmlin b/doc-xc/src/sgml/ref/create_rule.sgmlin
index 8176df0eff..5100e71ae0 100644
--- a/doc-xc/src/sgml/ref/create_rule.sgmlin
+++ b/doc-xc/src/sgml/ref/create_rule.sgmlin
@@ -47,6 +47,9 @@ CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS
<!## XC>
<productname>Postgres-XC</> inherits the rule system from <productname>PostgreSQL</productname> which allows one to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> inherits the rule system from <productname>PostgreSQL</productname> which allows one to
+<!## end>
define an alternative action to be performed on insertions, updates,
or deletions in database tables. Roughly speaking, a rule causes
additional commands to be executed when a given command on a given
@@ -239,6 +242,9 @@ CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS
<!## XC>
accepted by <productname>Postgres-XC</productname>, the
<!## end>
+<!## XL>
+ accepted by <productname>Postgres-XL</productname>, the
+<!## end>
<command>SELECT</command> command would cause
<!## PG>
<productname>PostgreSQL</productname> to report an error because
@@ -246,6 +252,9 @@ CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS
<!## XC>
<productname>Postgres-XC</productname> to report an error because
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> to report an error because
+<!## end>
of recursive expansion of a rule:
<programlisting>
@@ -292,6 +301,9 @@ UPDATE mytable SET name = 'foo' WHERE id = 42;
<!## XC>
<productname>Postgres-XC</productname> language extension, as is the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> language extension, as is the
+<!## end>
entire query rewrite system.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_schema.sgmlin b/doc-xc/src/sgml/ref/create_schema.sgmlin
index c916fbf73b..356f19e404 100644
--- a/doc-xc/src/sgml/ref/create_schema.sgmlin
+++ b/doc-xc/src/sgml/ref/create_schema.sgmlin
@@ -167,6 +167,9 @@ CREATE VIEW hollywood.winners AS
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
<para>
@@ -178,6 +181,9 @@ CREATE VIEW hollywood.winners AS
<!## XC>
<productname>Postgres-XC</productname> implementation, inherited from <productname>PostgreSQL</>, does not
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> implementation, inherited from <productname>PostgreSQL</>, does not
+<!## end>
handle all cases of forward references in subcommands; it might
sometimes be necessary to reorder the subcommands in order to avoid
forward references.
@@ -191,6 +197,9 @@ CREATE VIEW hollywood.winners AS
<!## XC>
all objects within it. <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ all objects within it. <productname>Postgres-XL</productname>
+<!## end>
allows schemas to contain objects owned by users other than the
schema owner. This can happen only if the schema owner grants the
<literal>CREATE</> privilege on his schema to someone else.
diff --git a/doc-xc/src/sgml/ref/create_server.sgmlin b/doc-xc/src/sgml/ref/create_server.sgmlin
index 95ad2585fb..71e2aac86d 100644
--- a/doc-xc/src/sgml/ref/create_server.sgmlin
+++ b/doc-xc/src/sgml/ref/create_server.sgmlin
@@ -37,6 +37,14 @@ CREATE SERVER <replaceable class="parameter">server_name</replaceable> [ TYPE '<
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>SERVER</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/create_table.sgmlin b/doc-xc/src/sgml/ref/create_table.sgmlin
index 29a75d11f0..6ac0dd5793 100644
--- a/doc-xc/src/sgml/ref/create_table.sgmlin
+++ b/doc-xc/src/sgml/ref/create_table.sgmlin
@@ -141,6 +141,66 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] <replaceable class="PARAMETER">table_name</replaceable> ( [
+ { <replaceable class="PARAMETER">column_name</replaceable> <replaceable class="PARAMETER">data_type</replaceable> [ DEFAULT <replaceable>default_expr</replaceable> ] [ <replaceable class="PARAMETER">column_constraint</replaceable> [ ... ] ]
+ | <replaceable>table_constraint</replaceable>
+ | LIKE <replaceable>parent_table</replaceable> [ <replaceable>like_option</replaceable> ... ] }
+ [, ... ]
+] )
+[ INHERITS ( <replaceable>parent_table</replaceable> [, ... ] ) ]
+[ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> [= <replaceable class="PARAMETER">value</replaceable>] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
+[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
+[ TABLESPACE <replaceable class="PARAMETER">tablespace</replaceable> ]
+[ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( <replaceable class="PARAMETER">column_name</replaceable> ) } } ]
+[ TO { GROUP <replaceable class="PARAMETER">groupname</replaceable> | NODE ( <replaceable class="PARAMETER">nodename</replaceable> [, ... ] ) } ]
+
+CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
+ OF <replaceable class="PARAMETER">type_name</replaceable> [ (
+ { <replaceable class="PARAMETER">column_name</replaceable> WITH OPTIONS [ DEFAULT <replaceable>default_expr</replaceable> ] [ <replaceable class="PARAMETER">column_constraint</replaceable> [ ... ] ]
+ | <replaceable>table_constraint</replaceable> }
+ [, ... ]
+) ]
+[ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> [= <replaceable class="PARAMETER">value</replaceable>] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
+[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
+[ TABLESPACE <replaceable class="PARAMETER">tablespace</replaceable> ]
+[ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( <replaceable class="PARAMETER">column_name</replaceable> ) } } ]
+[ TO { GROUP <replaceable class="PARAMETER">groupname</replaceable> | NODE ( <replaceable class="PARAMETER">nodename</replaceable> [, ... ] ) } ]
+
+<phrase>where <replaceable class="PARAMETER">column_constraint</replaceable> is:</phrase>
+
+[ CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable> ]
+{ NOT NULL |
+ NULL |
+ CHECK ( <replaceable class="PARAMETER">expression</replaceable> ) |
+ UNIQUE <replaceable class="PARAMETER">index_parameters</replaceable> |
+ PRIMARY KEY <replaceable class="PARAMETER">index_parameters</replaceable> |
+ REFERENCES <replaceable class="PARAMETER">reftable</replaceable> [ ( <replaceable class="PARAMETER">refcolumn</replaceable> ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
+ [ ON DELETE <replaceable class="parameter">action</replaceable> ] [ ON UPDATE <replaceable class="parameter">action</replaceable> ] }
+[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
+
+<phrase>and <replaceable class="PARAMETER">table_constraint</replaceable> is:</phrase>
+
+[ CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable> ]
+{ CHECK ( <replaceable class="PARAMETER">expression</replaceable> ) |
+ UNIQUE ( <replaceable class="PARAMETER">column_name</replaceable> [, ... ] ) <replaceable class="PARAMETER">index_parameters</replaceable> |
+ PRIMARY KEY ( <replaceable class="PARAMETER">column_name</replaceable> [, ... ] ) <replaceable class="PARAMETER">index_parameters</replaceable> |
+ FOREIGN KEY ( <replaceable class="PARAMETER">column_name</replaceable> [, ... ] ) REFERENCES <replaceable class="PARAMETER">reftable</replaceable> [ ( <replaceable class="PARAMETER">refcolumn</replaceable> [, ... ] ) ]
+ [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE <replaceable class="parameter">action</replaceable> ] [ ON UPDATE <replaceable class="parameter">action</replaceable> ] }
+[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
+
+<phrase>and <replaceable class="PARAMETER">like_option</replaceable> is:</phrase>
+
+{ INCLUDING | EXLLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | ALL }
+
+<phrase><replaceable class="PARAMETER">index_parameters</replaceable> in <literal>UNIQUE</literal> and <literal>PRIMARY KEY</literal> constraints are:</phrase>
+
+[ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> [= <replaceable class="PARAMETER">value</replaceable>] [, ... ] ) ]
+[ USING INDEX TABLESPACE <replaceable class="PARAMETER">tablespace</replaceable> ]
+
+</synopsis>
+<!## end>
</refsynopsisdiv>
@@ -154,6 +214,13 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
</para>
</note>
<!## end>
+<!## XL>
+ <note>
+ <para>
+ The syntax of <command>CREATE TABLE</> applies only to <productname>Postgres-XL</>.
+ </para>
+ </note>
+<!## end>
<para>
<command>CREATE TABLE</command> will create a new, initially empty table
@@ -315,6 +382,9 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
<!## XC>
<productname>Postgres-XC</productname>, refer to <xref
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, refer to <xref
+<!## end>
linkend="datatype">.
</para>
</listitem>
@@ -371,6 +441,13 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
</para>
&common;
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ It is currently not possible to distribute a table with more than one parent.
+ </para>
+&common;
+<!## end>
<para>
<literal>CHECK</> constraints are merged in essentially the same way as
@@ -562,6 +639,16 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
&common;
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, if <command>DISTRIBUTE BY
+ REPLICATION</> is not specified, only the distribution key is
+ allowed to have this constraint.
+ </para>
+
+&common;
+<!## end>
<para>
Each unique table constraint must name a set of columns that is
@@ -612,6 +699,19 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
columns.
</para>
<!## end>
+<!## XL>
+ <para>
+ The primary key constraint should name a set of columns that is
+ different from other sets of columns named by any unique
+ constraint defined for the same table.
+ </para>
+
+ <para>
+ If <command>DISTRIBUTE BY REPLICATION</> is not specified, the
+ distribution key must be included in the set of primary key
+ columns.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -879,6 +979,14 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
rows stored in different Datanodes.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, OID is managed locally in each
+ Datanode and Coordinator. The OID value may be inconsistent for
+ rows stored in different Datanodes.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -1066,6 +1174,118 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><literal>DISTRIBUTE BY</literal></term>
+ <listitem>
+&xlonly;
+ <para>
+ This clause specifies how the table is distributed or replicated among Datanodes.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><literal>REPLICATION</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be replicated to all the
+ Datanode of the <productname>Postgres-XL</> database
+ cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>ROUNDROBIN</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed in one of the Datanodes
+ in a round-robin manner. The value of the row will not be
+ needed to determine what Datanode to go.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>HASH ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the hash value
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>MODULO ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the modulo
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ <para>
+ If <literal>DISTRIBUTE BY</> is not specified, columns with
+ UNIQUE constraint will be chosen as the distribution key. If no
+ such column is specified, distribution column is the first
+ eligible column in the definition. If no such column is found,
+ then the table will be distributed by <literal>ROUNDROBIN</>.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>TO GROUP</literal></term>
+ <term><literal>TO NODE</literal></term>
+ <listitem>
+ <para>
+ This defines on the list of nodes on which table data exists.
+ If this is not specified table data is present on all Datanodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="PARAMETER">nodename</replaceable></term>
+ <listitem>
+ <para>
+ Associated with <literal>TO NODE</literal>, it defines a <productname>
+ Postgres-XL</productname> node of catalog pgxc_node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="PARAMETER">groupname</replaceable></term>
+ <listitem>
+ <para>
+ Associated with <literal>TO GROUP</literal>, it defines a <productname>
+ Postgres-XL</productname> node group in catalog pgxc_group.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
</variablelist>
@@ -1259,6 +1479,12 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
possible.
</para>
<!## end>
+<!## XL>
+ <para>
+ Using OIDs in new applications is not recommended: where
+ possible.
+ </para>
+<!## end>
<tip>
<para>
@@ -1275,6 +1501,9 @@ CREATE TABLE <replaceable class="PARAMETER">table_name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> automatically creates an
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> automatically creates an
+<!## end>
index for each unique constraint and primary key constraint to
enforce uniqueness. Thus, it is not necessary to create an
index explicitly for primary key columns. (See <xref
@@ -1332,6 +1561,17 @@ CREATE TABLE distributors (
);
</programlisting>
<!## end>
+<!## XL>
+<!-- NOTICE:
+ XL does not support immutable function here.
+-->
+<programlisting>
+CREATE TABLE distributors (
+ did integer PRIMARY KEY,
+ name varchar(40) NOT NULL CHECK (name &lt;&gt; '')
+);
+</programlisting>
+<!## end>
</para>
<para>
@@ -1527,6 +1767,15 @@ CREATE TABLE cinemas (
) TABLESPACE diskvol1;
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+CREATE TABLE cinemas (
+ id integer,
+ name text,
+ location text
+) TABLESPACE diskvol1;
+</programlisting>
+<!## end>
</para>
<para>
@@ -1565,6 +1814,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
<productname>Postgres-XC</productname> instead
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> instead
+<!## end>
requires each session to issue its own <literal>CREATE TEMPORARY
TABLE</literal> command for each temporary table to be used. This allows
different sessions to use the same temporary table name for different
@@ -1615,6 +1867,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
not deferrable, <productname>Postgres-XC</productname> checks for
<!## end>
+<!## XL>
+ not deferrable, <productname>Postgres-XL</productname> checks for
+<!## end>
uniqueness immediately whenever a row is inserted or modified.
The SQL standard says that uniqueness should be enforced only at
the end of the statement; this makes a difference when, for example,
@@ -1639,6 +1894,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
<productname>Postgres-XC</productname> does not enforce this
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> does not enforce this
+<!## end>
restriction; it treats column and table check constraints alike.
</para>
</refsect2>
@@ -1654,6 +1912,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect2>
@@ -1668,6 +1929,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
non-constraint) is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ non-constraint) is a <productname>Postgres-XL</productname>
+<!## end>
extension to the SQL standard that is included for compatibility with some
other database systems (and for symmetry with the <literal>NOT
NULL</literal> constraint). Since it is the default for any
@@ -1686,6 +1950,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
a <productname>Postgres-XC</productname> language extension.
<!## end>
+<!## XL>
+ a <productname>Postgres-XL</productname> language extension.
+<!## end>
SQL:1999 and later define single inheritance using a
different syntax and different semantics. SQL:1999-style
inheritance is not yet supported by
@@ -1695,6 +1962,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
</refsect2>
@@ -1708,6 +1978,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
<productname>Postgres-XC</productname> allows a table of no columns
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows a table of no columns
+<!## end>
to be created (for example, <literal>CREATE TABLE foo();</>). This
is an extension from the SQL standard, which does not allow zero-column
tables. Zero-column tables are not in themselves very useful, but
@@ -1726,6 +1999,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
The <literal>WITH</> clause is a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ The <literal>WITH</> clause is a <productname>Postgres-XL</productname>
+<!## end>
extension; neither storage parameters nor OIDs are in the standard.
</para>
</refsect2>
@@ -1740,6 +2016,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
The <productname>Postgres-XC</productname> concept of tablespaces is not
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> concept of tablespaces is not
+<!## end>
part of the standard. Hence, the clauses <literal>TABLESPACE</literal>
and <literal>USING INDEX TABLESPACE</literal> are extensions.
</para>
@@ -1758,6 +2037,9 @@ CREATE TABLE employees OF employee_type (
<!## XC>
the <quote>self-referencing column</quote>. Postgres-XC does not
<!## end>
+<!## XL>
+ the <quote>self-referencing column</quote>. Postgres-XL does not
+<!## end>
support these self-referencing columns explicitly, but the same
effect can be had using the OID feature.
</para>
@@ -1791,6 +2073,34 @@ CREATE TABLE employees OF employee_type (
</refsect2>
<!## end>
+<!## XL>
+ <refsect2>
+ <title><productname>Postgres-XL</> Specifics</title>
+
+&xlonly;
+ <para>
+ Currently, non-immutable functions are not allowed
+ as <literal>DEFAULT</> values.
+ </para>
+ <para>
+ <literal>PRIMARY KEY</> and foreign key must include the
+ distribution column.
+ </para>
+ <para>
+ <literal>TEMP</> tables and exclusion constraint are not supported
+ yet.
+ </para>
+ <para>
+ </para>
+ <para>
+ In <productname>Postgres-XL</>, OID is maintained locally in each
+ Datanode and Coordinator. The OID value may be inconsistent for rows
+ stored in different Datanodes.
+ </para>
+
+ </refsect2>
+
+<!## end>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_table_as.sgmlin b/doc-xc/src/sgml/ref/create_table_as.sgmlin
index 23644ba710..780ee3aea0 100644
--- a/doc-xc/src/sgml/ref/create_table_as.sgmlin
+++ b/doc-xc/src/sgml/ref/create_table_as.sgmlin
@@ -44,6 +44,19 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE <replaceable
[ WITH [ NO ] DATA ]
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE <replaceable>table_name</replaceable>
+ [ (<replaceable>column_name</replaceable> [, ...] ) ]
+ [ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> [= <replaceable class="PARAMETER">value</replaceable>] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
+ [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
+ [ TABLESPACE <replaceable class="PARAMETER">tablespace</replaceable> ]
+ [ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( <replaceable class="PARAMETER">column_name</replaceable> ) } } ]
+ [ TO { GROUP <replaceable class="PARAMETER">groupname</replaceable> | NODE ( <replaceable class="PARAMETER">nodename</replaceable> [, ... ] ) } ]
+ AS <replaceable>query</replaceable>
+ [ WITH [ NO ] DATA ]
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -328,6 +341,118 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE <replaceable
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><literal>DISTRIBUTE BY</literal></term>
+ <listitem>
+&xlonly;
+ <para>
+ This clause specifies how the table is distributed or replicated among Datanodes.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><literal>REPLICATION</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be replicated into all the
+ Datanode of the <productname>Postgres-XL</> database
+ cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>ROUNDROBIN</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed in one of the Datanodes
+ by round-robin manner. The value of the row will not be
+ needed to determine what Datanode to go.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>HASH ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the hash value
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>MODULO ( <replaceable class="PARAMETER">column_name</> )</literal></term>
+ <listitem>
+ <para>
+ Each row of the table will be placed based on the modulo
+ of the specified column. Following type is allowed as
+ distribution column: INT8, INT2, OID, INT4, BOOL, INT2VECTOR,
+ OIDVECTOR, CHAR, NAME, TEXT, BPCHAR, BYTEA, VARCHAR, FLOAT4,
+ FLOAT8, NUMERIC, CASH, ABSTIME, RELTIME, DATE, TIME,
+ TIMESTAMP, TIMESTAMPTZ, INTERVAL, and TIMETZ.
+ </para>
+ <para>
+ Please note that floating point is not allowed as a basis of
+ the distribution column.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ <para>
+ If <literal>DISTRIBUTE BY</> is not specified, columns with
+ UNIQUE constraint will be chosen as the distribution key. If no
+ such column is specified, distribution column is the first
+ eligible column in the definition. If no such column is found,
+ then the table will be distributed by <literal>ROUNDROBIN</>.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>TO GROUP</literal></term>
+ <term><literal>TO NODE</literal></term>
+ <listitem>
+ <para>
+ This defines on the list of nodes on which table data exists.
+ If this is not specified table data is present on all Datanodes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="PARAMETER">nodename</replaceable></term>
+ <listitem>
+ <para>
+ Associated with <literal>TO NODE</literal>, it defines a <productname>
+ Postgres-XL</productname> node of catalog pgxc_node.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="PARAMETER">groupname</replaceable></term>
+ <listitem>
+ <para>
+ Associated with <literal>TO GROUP</literal>, it defines a <productname>
+ Postgres-XL</productname> node group in catalog pgxc_group.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><replaceable>query</replaceable></term>
diff --git a/doc-xc/src/sgml/ref/create_tablespace.sgmlin b/doc-xc/src/sgml/ref/create_tablespace.sgmlin
index e3f9ff21c9..9a3a08ec3a 100644
--- a/doc-xc/src/sgml/ref/create_tablespace.sgmlin
+++ b/doc-xc/src/sgml/ref/create_tablespace.sgmlin
@@ -90,6 +90,9 @@ CREATE TABLESPACE <replaceable class="parameter">tablespace_name</replaceable> [
<!## XC>
<productname>Postgres-XC</> system user. The directory must be
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> system user. The directory must be
+<!## end>
specified by an absolute path name.
</para>
</listitem>
@@ -124,6 +127,22 @@ CREATE TABLESPACE <replaceable class="parameter">tablespace_name</replaceable> [
application client is connected.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> assigns the same path to a tablespace
+ for all the Coordinators and Datanodes. So when creating a tablespace,
+ user needs to have permission to the same location path on all the servers
+ involved in the cluster.
+ </para>
+
+ <para>
+ <command>CREATE TABLESPACE</> can be run with EXECUTE DIRECT to control
+ tablespace existence on remote nodes. This works for both remote Coordinators
+ and Datanodes but not on this operation is not authorized on node where
+ application client is connected.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -155,6 +174,9 @@ CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes';
<!## XC>
<command>CREATE TABLESPACE</command> is a <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <command>CREATE TABLESPACE</command> is a <productname>Postgres-XL</>
+<!## end>
extension.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_trigger.sgmlin b/doc-xc/src/sgml/ref/create_trigger.sgmlin
index dc867be4bf..abc277cfb9 100644
--- a/doc-xc/src/sgml/ref/create_trigger.sgmlin
+++ b/doc-xc/src/sgml/ref/create_trigger.sgmlin
@@ -41,6 +41,23 @@ CREATE [ CONSTRAINT ] TRIGGER <replaceable class="PARAMETER">name</replaceable>
<refsect1>
<title>Description</title>
+<!## XC>
+&xconly;
+ <para>
+ <command>CREATE TRIGGER</> statement has not been supported
+ in <productname>Postgres-XC</> yet.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <command>CREATE TRIGGER</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
+
+<!## PG>
+
<para>
<command>CREATE TRIGGER</command> creates a new trigger. The
trigger will be associated with the specified table or view and will
@@ -48,13 +65,6 @@ CREATE [ CONSTRAINT ] TRIGGER <replaceable class="PARAMETER">name</replaceable>
class="parameter">function_name</replaceable> when certain events occur.
</para>
-<!## XC>
-&xconly;
- <para>
- <literal>FOR EACH ROW</literal> is not supported by <productname>Postgres-XC</> yet.
- </para>
-<!## end>
-
<para>
The trigger can be specified to fire before the
operation is attempted on a row (before constraints are checked and
@@ -557,6 +567,7 @@ CREATE TRIGGER view_insert
<productname>PostgreSQL</productname> extension of the <acronym>SQL</>
standard.
</para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/create_type.sgmlin b/doc-xc/src/sgml/ref/create_type.sgmlin
index 4ffdfa60f7..22d594d20c 100644
--- a/doc-xc/src/sgml/ref/create_type.sgmlin
+++ b/doc-xc/src/sgml/ref/create_type.sgmlin
@@ -102,6 +102,9 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> build).
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> build).
+<!## end>
</para>
</refsect2>
@@ -219,6 +222,9 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
<!## XC>
<literal>numeric(30,2)</>. <productname>Postgres-Xc</productname> allows
<!## end>
+<!## XL>
+ <literal>numeric(30,2)</>. <productname>Postgres-XL</productname> allows
+<!## end>
user-defined types to take one or more simple constants or identifiers as
modifiers. However, this information must be capable of being packed into a
single non-negative integer value for storage in the system catalogs. The
@@ -263,6 +269,9 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
<!## XC>
that must be declared to <productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ that must be declared to <productname>Postgres-XL</productname>.
+<!## end>
Foremost of these is
<replaceable class="parameter">internallength</replaceable>.
Base data types can be fixed-length, in which case
@@ -394,6 +403,9 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
<!## XC>
<productname>Postgres-XC</productname> automatically creates an
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> automatically creates an
+<!## end>
associated array type, whose name consists of the base type's
name prepended with an underscore, and truncated if necessary to keep
it less than <symbol>NAMEDATALEN</symbol> bytes long. (If the name
@@ -702,6 +714,9 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
<!## XC>
In this approach, <productname>Postgres-XC</productname> will first see
<!## end>
+<!## XL>
+ In this approach, <productname>Postgres-XL</productname> will first see
+<!## end>
the name of the new data type as the return type of the input function.
The shell type is implicitly created in this situation, and then it
can be referenced in the definitions of the remaining I/O functions.
@@ -825,6 +840,9 @@ CREATE TABLE big_objs (
<!## XC>
The other forms are <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ The other forms are <productname>Postgres-XL</productname>
+<!## end>
extensions. The <command>CREATE TYPE</command> statement in
the <acronym>SQL</> standard also defines other forms that are not
<!## PG>
@@ -833,6 +851,9 @@ CREATE TABLE big_objs (
<!## XC>
implemented in <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ implemented in <productname>Postgres-XL</>.
+<!## end>
</para>
<para>
@@ -845,6 +866,10 @@ CREATE TABLE big_objs (
a <productname>Postgres-XC</productname>-specific deviation from the
standard (analogous to <command>CREATE TABLE</command>), inherited from <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+ a <productname>Postgres-XL</productname>-specific deviation from the
+ standard (analogous to <command>CREATE TABLE</command>), inherited from <productname>PostgreSQL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_user.sgmlin b/doc-xc/src/sgml/ref/create_user.sgmlin
index 51870d870b..7cefb23c9c 100644
--- a/doc-xc/src/sgml/ref/create_user.sgmlin
+++ b/doc-xc/src/sgml/ref/create_user.sgmlin
@@ -71,6 +71,9 @@ CREATE USER <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
<!## XC>
<productname>Postgres-XC</productname> extension. The SQL standard
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. The SQL standard
+<!## end>
leaves the definition of users to the implementation.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/create_user_mapping.sgmlin b/doc-xc/src/sgml/ref/create_user_mapping.sgmlin
index 9b9d9a983a..5cc2ebfafe 100644
--- a/doc-xc/src/sgml/ref/create_user_mapping.sgmlin
+++ b/doc-xc/src/sgml/ref/create_user_mapping.sgmlin
@@ -37,6 +37,14 @@ CREATE USER MAPPING FOR { <replaceable class="parameter">user_name</replaceable>
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>USER MAPPING</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/create_view.sgmlin b/doc-xc/src/sgml/ref/create_view.sgmlin
index 163fd1cb28..3e9de6707b 100644
--- a/doc-xc/src/sgml/ref/create_view.sgmlin
+++ b/doc-xc/src/sgml/ref/create_view.sgmlin
@@ -32,6 +32,12 @@ CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW <replaceable class="PARAMETER">n
AS <replaceable class="PARAMETER">query</replaceable>
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW <replaceable class="PARAMETER">name</replaceable> [ ( <replaceable class="PARAMETER">column_name</replaceable> [, ...] ) ]
+ AS <replaceable class="PARAMETER">query</replaceable>
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -73,6 +79,16 @@ CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW <replaceable class="PARAMETER">n
in the same schema.
</para>
<!## end>
+<!## XL>
+ <para>
+ If a schema name is given (for example, <literal>CREATE VIEW
+ myschema.myview ...</>) then the view is created in the specified
+ schema. Otherwise it is created in the current schema.
+ The name of the view must be
+ distinct from the name of any other view, table, sequence, or index
+ in the same schema.
+ </para>
+<!## end>
</refsect1>
@@ -90,6 +106,13 @@ CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW <replaceable class="PARAMETER">n
future releases.
</para>
<!## end>
+<!## XL>
+ <para>
+ <literal>TEMPORARY</> are not yet supported
+ in <productname>Postgres-XL</>. This may be supported by the
+ future releases.
+ </para>
+<!## end>
<!## PG>
<para>
If specified, the view is created as a temporary view.
@@ -271,6 +294,9 @@ CREATE VIEW <replaceable class="parameter">name</replaceable> [ ( <replaceable c
<!## XC>
<productname>Postgres-XC</productname> language extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> language extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/createdb.sgmlin b/doc-xc/src/sgml/ref/createdb.sgmlin
index fa295b3260..f4e8e0677d 100644
--- a/doc-xc/src/sgml/ref/createdb.sgmlin
+++ b/doc-xc/src/sgml/ref/createdb.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>create a new <productname>Postgres-XC</productname> database</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>create a new <productname>Postgres-XL</productname> database</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-createdb">
@@ -49,6 +52,9 @@ PostgreSQL documentation
<!## XC>
<application>createdb</application> creates a new <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <application>createdb</application> creates a new <productname>Postgres-XL</productname>
+<!## end>
database.
</para>
@@ -87,6 +93,9 @@ PostgreSQL documentation
<!## XC>
unique among all <productname>Postgres-XC</productname> databases in this cluster.
<!## end>
+<!## XL>
+ unique among all <productname>Postgres-XL</productname> databases in this cluster.
+<!## end>
The default is to create a database with the same name as the
current system user.
</para>
@@ -137,6 +146,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> servers are described in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> servers are described in
+<!## end>
<xref linkend="multibyte-charset-supported">.
</para>
</listitem>
@@ -338,6 +350,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
diff --git a/doc-xc/src/sgml/ref/createlang.sgmlin b/doc-xc/src/sgml/ref/createlang.sgmlin
index 15b0d02e09..8d30171c22 100644
--- a/doc-xc/src/sgml/ref/createlang.sgmlin
+++ b/doc-xc/src/sgml/ref/createlang.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>install a <productname>Postgres-XC</productname> procedural language</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>install a <productname>Postgres-XL</productname> procedural language</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-createlang">
@@ -52,6 +55,9 @@ PostgreSQL documentation
<!## XC>
procedural language to a <productname>Postgres-XC</productname> database.
<!## end>
+<!## XL>
+ procedural language to a <productname>Postgres-XL</productname> database.
+<!## end>
</para>
<para>
@@ -68,6 +74,9 @@ PostgreSQL documentation
<!## XC>
in a future <productname>Postgres-XC</productname> release. Direct use
<!## end>
+<!## XL>
+ in a future <productname>Postgres-XL</productname> release. Direct use
+<!## end>
of the <command>CREATE EXTENSION</> command is recommended instead.
</para>
</caution>
@@ -252,6 +261,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
diff --git a/doc-xc/src/sgml/ref/createuser.sgmlin b/doc-xc/src/sgml/ref/createuser.sgmlin
index 2d5c957d3c..a1be3cdd65 100644
--- a/doc-xc/src/sgml/ref/createuser.sgmlin
+++ b/doc-xc/src/sgml/ref/createuser.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>define a new <productname>Postgres-XC</productname> user account</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>define a new <productname>Postgres-XL</productname> user account</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-createuser">
@@ -44,6 +47,9 @@ PostgreSQL documentation
<!## XC>
new <productname>Postgres-XC</productname> user (or more precisely, a role).
<!## end>
+<!## XL>
+ new <productname>Postgres-XL</productname> user (or more precisely, a role).
+<!## end>
Only superusers and users with <literal>CREATEROLE</> privilege can create
new users, so <application>createuser</application> must be
invoked by someone who can connect as a superuser or a user with
@@ -84,6 +90,9 @@ PostgreSQL documentation
<!## XC>
Specifies the name of the <productname>Postgres-XC</productname> user
<!## end>
+<!## XL>
+ Specifies the name of the <productname>Postgres-XL</productname> user
+<!## end>
to be created.
This name must be different from all existing roles in this
<!## PG>
@@ -92,6 +101,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> installation.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> installation.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -394,6 +406,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
diff --git a/doc-xc/src/sgml/ref/declare.sgmlin b/doc-xc/src/sgml/ref/declare.sgmlin
index aa40bdf5a1..dab62fbec1 100644
--- a/doc-xc/src/sgml/ref/declare.sgmlin
+++ b/doc-xc/src/sgml/ref/declare.sgmlin
@@ -37,6 +37,12 @@ DECLARE <replaceable class="parameter">name</replaceable> [ BINARY ] [ NO SCROLL
CURSOR [ WITHOUT HOLD ] FOR <replaceable class="parameter">query</replaceable>
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+DECLARE <replaceable class="parameter">name</replaceable> [ BINARY ] [ NO SCROLL ]
+ CURSOR [ WITHOUT HOLD ] FOR <replaceable class="parameter">query</replaceable>
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -87,13 +93,20 @@ DECLARE <replaceable class="parameter">name</replaceable> [ BINARY ] [ NO SCROLL
<varlistentry>
<term><literal>INSENSITIVE</literal></term>
<listitem>
-&xconly;
<!## XC>
+&xconly;
<para>
Current release of <productname>Postgres-XC</> does not
support <literal>INSENSITIVE</literal> cursor.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current release of <productname>Postgres-XL</> does not
+ support <literal>INSENSITIVE</literal> cursor.
+ </para>
+<!## end>
<!## PG>
<para>
Indicates that data retrieved from the cursor should be
@@ -122,13 +135,20 @@ DECLARE <replaceable class="parameter">name</replaceable> [ BINARY ] [ NO SCROLL
<literal>SCROLL</literal>. See <xref linkend="sql-declare-notes"
endterm="sql-declare-notes-title"> for details.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Current release of <productname>Postgres-XC</> does not
support <literal>SCROLL</> cursor.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The current release of <productname>Postgres-XL</> does not
+ support <literal>SCROLL</> cursor.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -145,13 +165,20 @@ DECLARE <replaceable class="parameter">name</replaceable> [ BINARY ] [ NO SCROLL
<literal>WITH HOLD</literal> is specified, <literal>WITHOUT
HOLD</literal> is the default.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Current release of <productname>Postgres-XC</> does ot
support <literal>WITH HOLD</> cursor.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current release of <productname>Postgres-XL</> does not
+ support <literal>WITH HOLD</> cursor.
+ </para>
+<!## end>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/ref/delete.sgmlin b/doc-xc/src/sgml/ref/delete.sgmlin
index 3b3304bdfe..626097d24d 100644
--- a/doc-xc/src/sgml/ref/delete.sgmlin
+++ b/doc-xc/src/sgml/ref/delete.sgmlin
@@ -36,6 +36,13 @@ DELETE FROM [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ]
[ RETURNING * | <replaceable class="parameter">output_expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] [, ...] ]
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+DELETE FROM [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ] <replaceable class="parameter">alias</replaceable> ]
+ [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]
+ [ RETURNING * | <replaceable class="parameter">output_expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] [, ...] ]
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -58,6 +65,9 @@ DELETE FROM [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ]
<!## XC>
<productname>Postgres-XC</productname> extension that provides a
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension that provides a
+<!## end>
faster mechanism to remove all rows from a table.
</para>
</tip>
@@ -108,6 +118,12 @@ DELETE FROM [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ]
supported by current release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+ <para>
+ <replaceable class="parameter">with_query</replaceable> is not
+ supported by current release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
<!## PG>
<para>
The <literal>WITH</literal> clause allows you to specify one or more
@@ -200,6 +216,14 @@ DELETE FROM [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ]
</para>
</footnote>
<!## end>
+<!## XL>
+ <footnote>
+ <para>
+ <literal>WHERE CURRENT OF</literal> is not supported in the
+ current version of <productname>Postgres-XL</productname>.
+ </para>
+ </footnote>
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -263,6 +287,9 @@ DELETE <replaceable class="parameter">count</replaceable>
<!## XC>
<productname>Postgres-XC</productname> lets you reference columns of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> lets you reference columns of
+<!## end>
other tables in the <literal>WHERE</> condition by specifying the
other tables in the <literal>USING</literal> clause. For example,
to delete all films produced by a given producer, one can do:
diff --git a/doc-xc/src/sgml/ref/drop_conversion.sgmlin b/doc-xc/src/sgml/ref/drop_conversion.sgmlin
index 02971548f4..8079234d2d 100644
--- a/doc-xc/src/sgml/ref/drop_conversion.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_conversion.sgmlin
@@ -97,6 +97,9 @@ DROP CONVERSION myname;
<!## XC>
statement in Postgres-XC.
<!## end>
+<!## XL>
+ statement in Postgres-XL.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_database.sgmlin b/doc-xc/src/sgml/ref/drop_database.sgmlin
index 11ff0446bb..5cc2d6b5ba 100644
--- a/doc-xc/src/sgml/ref/drop_database.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_database.sgmlin
@@ -52,6 +52,15 @@ DROP DATABASE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
CONNECITON</> statement.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If there are any live connections to any of the template databases in
+ a Coordinator or Datanode, you will receive an error message. In this
+ case, you should clean these connections using <command>CLEAN
+ CONNECITON</> statement.
+ </para>
+<!## end>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_domain.sgmlin b/doc-xc/src/sgml/ref/drop_domain.sgmlin
index dce2ca0637..e1e70f0dd5 100644
--- a/doc-xc/src/sgml/ref/drop_domain.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_domain.sgmlin
@@ -106,6 +106,10 @@ DROP DOMAIN box;
<literal>IF EXISTS</> option, which is a <productname>Postgres-XC</>
extension inheritedofrm <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+ <literal>IF EXISTS</> option, which is a <productname>Postgres-XL</>
+ extension inheritedofrm <productname>PostgreSQL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_foreign_data_wrapper.sgmlin b/doc-xc/src/sgml/ref/drop_foreign_data_wrapper.sgmlin
index e428a424e7..fd1efe30b4 100644
--- a/doc-xc/src/sgml/ref/drop_foreign_data_wrapper.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_foreign_data_wrapper.sgmlin
@@ -35,6 +35,14 @@ DROP FOREIGN DATA WRAPPER [ IF EXISTS ] <replaceable class="parameter">name</rep
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>FOREIGN DATA WRAPPER</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/drop_index.sgmlin b/doc-xc/src/sgml/ref/drop_index.sgmlin
index 293e5aee77..85b5449d8b 100644
--- a/doc-xc/src/sgml/ref/drop_index.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_index.sgmlin
@@ -104,6 +104,9 @@ DROP INDEX title_idx;
<!## XC>
<productname>Postgres-XC</productname> language extension. There
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> language extension. There
+<!## end>
are no provisions for indexes in the SQL standard.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_node.sgmlin b/doc-xc/src/sgml/ref/drop_node.sgmlin
index f2dc66bf6e..3b9e9adad1 100644
--- a/doc-xc/src/sgml/ref/drop_node.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_node.sgmlin
@@ -84,3 +84,85 @@ DROP NODE cluster_node;
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-DROPNODE">
+ <refmeta>
+ <refentrytitle>DROP NODE</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>DROP NODE</refname>
+ <refpurpose>drop a cluster node</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-dropnode">
+ <primary>DROP NODE</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+DROP NODE <replaceable class="parameter">nodename</replaceable>
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>DROP NODE</command> is new SQL command specific
+ to <productname>Postgres-XL</productname> that deletes
+ cluster node information in catalog pgxc_node.
+ </para>
+ <para>
+ Node connection that has been deleted does not guarantee that connection
+ information cached in pooler is updated accordingly.
+ </para>
+ <para>
+ <command>DROP NODE</command> only runs on the local node where it is launched.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Parameters</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="parameter">nodename</replaceable></term>
+ <listitem>
+ <para>
+ The name of the selected cluster node.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+
+ <para>
+ Drop a cluster node.
+<programlisting>
+DROP NODE cluster_node;
+</programlisting>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>DROP NODE</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/drop_nodegroup.sgmlin b/doc-xc/src/sgml/ref/drop_nodegroup.sgmlin
index c20fb3b59c..c3906bb796 100644
--- a/doc-xc/src/sgml/ref/drop_nodegroup.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_nodegroup.sgmlin
@@ -81,3 +81,82 @@ DROP NODE GROUP cluster_group;
</refentry>
<!## end>
+<!## XL>
+<refentry id="SQL-DROPNODEGROUP">
+ <refmeta>
+ <refentrytitle>DROP NODE GROUP</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>DROP NODE GROUP</refname>
+ <refpurpose>drop a group of cluster nodes</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-dropnodegroup">
+ <primary>DROP NODE GROUP</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+DROP NODE GROUP <replaceable class="parameter">groupname</replaceable>
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>DROP NODE GROUP</command> is SQL command specific
+ to <productname>Postgres-XL</productname> that deletes
+ node group information in catalog pgxc_group.
+ </para>
+ <para>
+ A group of nodes works as an alias for node lists when defining tables
+ on sub-clusters.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Parameters</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="parameter">groupname</replaceable></term>
+ <listitem>
+ <para>
+ The name of the selected cluster node group.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+
+ <para>
+ Drop a cluster node group.
+<programlisting>
+DROP NODE GROUP cluster_group;
+</programlisting>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>DROP NODE GROUP</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/drop_owned.sgmlin b/doc-xc/src/sgml/ref/drop_owned.sgmlin
index cb9b41c381..562854d995 100644
--- a/doc-xc/src/sgml/ref/drop_owned.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_owned.sgmlin
@@ -110,6 +110,9 @@ DROP OWNED BY <replaceable class="PARAMETER">name</replaceable> [, ...] [ CASCAD
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_role.sgmlin b/doc-xc/src/sgml/ref/drop_role.sgmlin
index 441b9d4f9b..12f967a7db 100644
--- a/doc-xc/src/sgml/ref/drop_role.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_role.sgmlin
@@ -90,6 +90,9 @@ DROP ROLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> [, ...
<!## XC>
<productname>Postgres-XC</productname> includes a program <xref
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes a program <xref
+<!## end>
linkend="APP-DROPUSER"> that has the
same functionality as this command (in fact, it calls this command)
but can be run from the command shell.
@@ -119,6 +122,9 @@ DROP ROLE jonathan;
<!## XC>
privilege requirements than <productname>Postgres-XC</productname> uses.
<!## end>
+<!## XL>
+ privilege requirements than <productname>Postgres-XL</productname> uses.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_schema.sgmlin b/doc-xc/src/sgml/ref/drop_schema.sgmlin
index c0fd1313b4..c68f3ea822 100644
--- a/doc-xc/src/sgml/ref/drop_schema.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_schema.sgmlin
@@ -114,6 +114,10 @@ DROP SCHEMA mystuff CASCADE;
<literal>IF EXISTS</> option, which is a <productname>Postgres-XC</>
extension inherited from <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+ <literal>IF EXISTS</> option, which is a <productname>Postgres-XL</>
+ extension inherited from <productname>PostgreSQL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_server.sgmlin b/doc-xc/src/sgml/ref/drop_server.sgmlin
index ab0448f8c2..af9de0c1d3 100644
--- a/doc-xc/src/sgml/ref/drop_server.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_server.sgmlin
@@ -35,6 +35,14 @@ DROP SERVER [ IF EXISTS ] <replaceable class="parameter">server_name</replaceabl
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>SERVER</> is not yet supported
+ in <productname>Postgres-XL</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/drop_table.sgmlin b/doc-xc/src/sgml/ref/drop_table.sgmlin
index d8683eb0ef..6373a952de 100644
--- a/doc-xc/src/sgml/ref/drop_table.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_table.sgmlin
@@ -120,6 +120,10 @@ DROP TABLE films, distributors;
<literal>IF EXISTS</> option, which is a <productname>Postgres-XC</>
extension inherited from <productname>PosrgreSQL</>.
<!## end>
+<!## XL>
+ <literal>IF EXISTS</> option, which is a <productname>Postgres-XL</>
+ extension inherited from <productname>PostgreSQL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_tablespace.sgmlin b/doc-xc/src/sgml/ref/drop_tablespace.sgmlin
index 6d3fb1e3f3..e0fb21754b 100644
--- a/doc-xc/src/sgml/ref/drop_tablespace.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_tablespace.sgmlin
@@ -87,6 +87,10 @@ DROP TABLESPACE [ IF EXISTS ] <replaceable class="PARAMETER">tablespace_name</re
application client is connected.
</para>
<!## end>
+<!## XL>
+ <para>
+ </para>
+<!## end>
</refsect1>
@@ -111,6 +115,9 @@ DROP TABLESPACE mystuff;
<!## XC>
<command>DROP TABLESPACE</command> is a <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ <command>DROP TABLESPACE</command> is a <productname>Postgres-XL</>
+<!## end>
extension.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_trigger.sgmlin b/doc-xc/src/sgml/ref/drop_trigger.sgmlin
index 9a9b8c286e..58b5897814 100644
--- a/doc-xc/src/sgml/ref/drop_trigger.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_trigger.sgmlin
@@ -28,6 +28,23 @@ DROP TRIGGER [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> ON
<refsect1>
<title>Description</title>
+<!## XC>
+&xconly;
+ <para>
+ <command>DROP TRIGGER</> statement has not been supported
+ in <productname>Postgres-XC</> yet.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <command>DROP TRIGGER</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
+
+<!## PG>
+
<para>
<command>DROP TRIGGER</command> removes an existing
trigger definition. To execute this command, the current
@@ -114,6 +131,7 @@ DROP TRIGGER if_dist_exists ON films;
<replaceable>name</replaceable></literal>.
</para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_type.sgmlin b/doc-xc/src/sgml/ref/drop_type.sgmlin
index 3429179815..63ba9d7708 100644
--- a/doc-xc/src/sgml/ref/drop_type.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_type.sgmlin
@@ -104,6 +104,9 @@ DROP TYPE box;
<!## XC>
option, which is a <productname>Postgres-XC</> extension inherited from <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+ option, which is a <productname>Postgres-XL</> extension inherited from <productname>PostgreSQL</>.
+<!## end>
But note that much of the <command>CREATE TYPE</command> command
and the data type extension mechanisms in
<!## PG>
@@ -112,6 +115,9 @@ DROP TYPE box;
<!## XC>
<productname>Postgres-XC</productname> differ from the SQL standard.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> differ from the SQL standard.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_user.sgmlin b/doc-xc/src/sgml/ref/drop_user.sgmlin
index 29f04b2eaf..32c940bc9c 100644
--- a/doc-xc/src/sgml/ref/drop_user.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_user.sgmlin
@@ -47,6 +47,9 @@ DROP USER [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> [, ...
<!## XC>
<productname>Postgres-XC</productname> extension. The SQL standard
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension. The SQL standard
+<!## end>
leaves the definition of users to the implementation.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/drop_user_mapping.sgmlin b/doc-xc/src/sgml/ref/drop_user_mapping.sgmlin
index 0adb2a4177..e6f1f6af19 100644
--- a/doc-xc/src/sgml/ref/drop_user_mapping.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_user_mapping.sgmlin
@@ -35,6 +35,14 @@ DROP USER MAPPING [ IF EXISTS ] FOR { <replaceable class="parameter">user_name</
in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>USER MAPPING</> has not been supported
+ by <productname>Postgres-XL</> yet. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
<!## PG>
&pgonly;
diff --git a/doc-xc/src/sgml/ref/drop_view.sgmlin b/doc-xc/src/sgml/ref/drop_view.sgmlin
index b084b58859..8785293ce2 100644
--- a/doc-xc/src/sgml/ref/drop_view.sgmlin
+++ b/doc-xc/src/sgml/ref/drop_view.sgmlin
@@ -106,6 +106,10 @@ DROP VIEW kinds;
<literal>IF EXISTS</> option, which is a <productname>Postgres-XC</>
extension inherited from <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+ <literal>IF EXISTS</> option, which is a <productname>Postgres-XL</>
+ extension inherited from <productname>PostgreSQL</>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/droplang.sgmlin b/doc-xc/src/sgml/ref/droplang.sgmlin
index c9815211a2..38cdfea6c3 100644
--- a/doc-xc/src/sgml/ref/droplang.sgmlin
+++ b/doc-xc/src/sgml/ref/droplang.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>remove a <productname>Postgres-XC</productname> procedural language</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>remove a <productname>Postgres-XL</productname> procedural language</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-droplang">
@@ -54,6 +57,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> database.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database.
+<!## end>
</para>
<para>
@@ -70,6 +76,9 @@ PostgreSQL documentation
<!## XC>
in a future <productname>Postgres-XC</productname> release. Direct use
<!## end>
+<!## XL>
+ in a future <productname>Postgres-XL</productname> release. Direct use
+<!## end>
of the <command>DROP EXTENSION</> command is recommended instead.
</para>
</caution>
@@ -254,6 +263,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
diff --git a/doc-xc/src/sgml/ref/dropuser.sgmlin b/doc-xc/src/sgml/ref/dropuser.sgmlin
index 0c072a62b8..d239ffcd34 100644
--- a/doc-xc/src/sgml/ref/dropuser.sgmlin
+++ b/doc-xc/src/sgml/ref/dropuser.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>remove a <productname>Postgres-XC</productname> user account</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>remove a <productname>Postgres-XL</productname> user account</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-dropuser">
@@ -47,6 +50,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> user.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> user.
+<!## end>
Only superusers and users with the <literal>CREATEROLE</> privilege can
<!## PG>
remove <productname>PostgreSQL</productname> users. (To remove a
@@ -54,6 +60,9 @@ PostgreSQL documentation
<!## XC>
remove <productname>Postgres-XC</productname> users. (To remove a
<!## end>
+<!## XL>
+ remove <productname>Postgres-XL</productname> users. (To remove a
+<!## end>
superuser, you must yourself be a superuser.)
</para>
@@ -84,6 +93,9 @@ PostgreSQL documentation
<!## XC>
Specifies the name of the <productname>Postgres-XC</productname> user to be removed.
<!## end>
+<!## XL>
+ Specifies the name of the <productname>Postgres-XL</productname> user to be removed.
+<!## end>
You will be prompted for a name if none is specified on the command line.
</para>
</listitem>
@@ -238,6 +250,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
diff --git a/doc-xc/src/sgml/ref/execute_direct.sgmlin b/doc-xc/src/sgml/ref/execute_direct.sgmlin
index 10411c6077..314ac97308 100644
--- a/doc-xc/src/sgml/ref/execute_direct.sgmlin
+++ b/doc-xc/src/sgml/ref/execute_direct.sgmlin
@@ -29,19 +29,18 @@ EXECUTE DIRECT ON ( <replaceable class="parameter">nodename</replaceable> [, ...
<refsect1>
<title>Description</title>
-&xconly;
+&xlonly;
<para>
- <command>EXECUTE DIRECT</command> is a SQL query specially created
- for Postgres-XC to allow to launch queries directly to dedicated
+ <command>EXECUTE DIRECT</command> is a SQL command specially created
+ for <productname>Postgres-XL</productname> to allow to launch queries directly to dedicated
nodes determined by a list of nodes <replaceable class="parameter">
nodelist</replaceable>.
</para>
<para>
- Since Postgres-XC 0.9.3, EXECUTE DIRECT is limited to used on 1 node
- only. Besides, the query sent to remote nodes designed by a list of
- <replaceable class="parameter">nodename</replaceable> is limited to
- <literal>SELECT</literal> queries. The usage of transaction queries
+ EXECUTE DIRECT is currenlty limited to be used on 1 node at a time
+ only.
+ The usage of transaction queries
(<literal>BEGIN</literal>, <literal>COMMIT</literal>...), DDL, and DML
(<literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE
</literal>) is forbidden to avoid data inconsistency among nodes
@@ -49,7 +48,7 @@ EXECUTE DIRECT ON ( <replaceable class="parameter">nodename</replaceable> [, ...
</para>
<para>
- Either Coordinator or Datanode can be selected by its node name.
+ Either a Coordinator or Datanode can be selected by its node name.
</para>
<para>
@@ -115,7 +114,7 @@ EXECUTE DIRECT ON dn50 'select tablename from pg_tables';
<title>Compatibility</title>
<para>
<command>EXECUTE DIRECT</command> does not conform to the <acronym>
- SQL</acronym> standards, it is a Postgres-XC specific command.
+ SQL</acronym> standards, it is a Postgres-XL specific command.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/explain.sgmlin b/doc-xc/src/sgml/ref/explain.sgmlin
index 82a2f5000d..9525388b61 100644
--- a/doc-xc/src/sgml/ref/explain.sgmlin
+++ b/doc-xc/src/sgml/ref/explain.sgmlin
@@ -83,8 +83,8 @@ EXPLAIN [ ANALYZE ] [ VERBOSE ] <replaceable class="parameter">statement</replac
are close to reality.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Please note that <command>explain</command> explains local plan at
the Coordinator only. If you'd like to see remote plan at
@@ -92,6 +92,14 @@ EXPLAIN [ ANALYZE ] [ VERBOSE ] <replaceable class="parameter">statement</replac
at <xref linkend="auto-explain">
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</productname>, EXPLAIN provides the cluster-wide
+ execution plan that will be executed, and provides insight into the inner
+ workings of how queries are processed in parallel.
+ </para>
+<!## end>
<important>
@@ -180,6 +188,7 @@ ROLLBACK;
</listitem>
</varlistentry>
+<!## XC>
<varlistentry>
<term><literal>NODES</literal></term>
<listitem>
@@ -201,6 +210,30 @@ ROLLBACK;
</para>
</listitem>
</varlistentry>
+<!## end>
+<!## XL>
+ <varlistentry>
+ <term><literal>NODES</literal></term>
+ <listitem>
+ <para>
+ Include information on the Datanodes involved in the execution of Data
+ Scan Node. This parameter defaults to <literal>TRUE</literal>. This option
+ is available in <productname>Postgres-XL</productname>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>NUM_NODES</literal></term>
+ <listitem>
+ <para>
+ Include information on the number of nodes involved in the execution of
+ Data Node Scan node. This parameter defaults to <literal>FALSE</literal>.
+ This option is available in <productname>Postgres-XL</productname>.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><literal>FORMAT</literal></term>
diff --git a/doc-xc/src/sgml/ref/fetch.sgmlin b/doc-xc/src/sgml/ref/fetch.sgmlin
index b229a4d25a..628cdce89b 100644
--- a/doc-xc/src/sgml/ref/fetch.sgmlin
+++ b/doc-xc/src/sgml/ref/fetch.sgmlin
@@ -62,6 +62,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
FORWARD ALL
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <replaceable class="PARAMETER">cursor_name</replaceable>
+
+<phrase>where <replaceable class="PARAMETER">direction</replaceable> can be empty or one of:</phrase>
+
+ NEXT
+ RELATIVE <replaceable class="PARAMETER">count</replaceable>
+ <replaceable class="PARAMETER">count</replaceable>
+ FORWARD
+ FORWARD <replaceable class="PARAMETER">count</replaceable>
+ FORWARD ALL
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -95,14 +109,22 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
appropriate.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
The forms <literal>PRIOR</>, <literal>FIRST</>, <literal>LAST</>
and <literal>ABSOLUTE</> are not supported by the current release
of <productname>Postgres-XC</>
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The forms <literal>PRIOR</>, <literal>FIRST</>, <literal>LAST</>
+ and <literal>ABSOLUTE</> are not supported by the current release
+ of <productname>Postgres-XL</>
+ </para>
+<!## end>
<para>
The forms using <literal>FORWARD</> and <literal>BACKWARD</>
@@ -112,13 +134,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
class="PARAMETER">count</replaceable> exceeds the number of rows
available).
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
The form using <literal>BACKWARD</> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The form using <literal>BACKWARD</> is not supported in the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
<para>
<literal>RELATIVE 0</>, <literal>FORWARD 0</>, and
@@ -127,13 +156,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
row. This will succeed unless the cursor is positioned before the
first row or after the last row; in which case, no row is returned.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
The form using <literal>BACKWARD</> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The form using <literal>BACKWARD</> is not supported in the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
<note>
<para>
@@ -174,13 +210,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
<para>
Fetch the prior row.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>PRIOR</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>PRIOR</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -190,13 +233,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
<para>
Fetch the first row of the query (same as <literal>ABSOLUTE 1</literal>).
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>FIRST</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>FIRST</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -206,13 +256,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
<para>
Fetch the last row of the query (same as <literal>ABSOLUTE -1</literal>).
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>LAST</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>LAST</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -231,13 +288,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
particular, <literal>ABSOLUTE 0</literal> positions before
the first row.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>ABSOLUTE</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>ABSOLUTE</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -324,13 +388,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
backwards). <literal>BACKWARD 0</literal> re-fetches the
current row.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>BACKWARD</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>BACKWARD</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
@@ -340,13 +411,20 @@ FETCH [ <replaceable class="PARAMETER">direction</replaceable> [ FROM | IN ] ] <
<para>
Fetch all prior rows (scanning backwards).
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
<literal>BACKWARD ALL</literal> is not supported by the current
release of <productname>Postgres-XC</>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <literal>BACKWARD ALL</literal> is not supported by the current
+ release of <productname>Postgres-XL</>.
+ </para>
+<!## end>
</listitem>
</varlistentry>
</variablelist>
diff --git a/doc-xc/src/sgml/ref/grant.sgmlin b/doc-xc/src/sgml/ref/grant.sgmlin
index c2fdeb83b6..0d45e29ab3 100644
--- a/doc-xc/src/sgml/ref/grant.sgmlin
+++ b/doc-xc/src/sgml/ref/grant.sgmlin
@@ -361,6 +361,9 @@ GRANT <replaceable class="PARAMETER">role_name</replaceable> [, ...] TO <replace
<!## XC>
<productname>Postgres-XC</productname>, though it is required by
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, though it is required by
+<!## end>
strict SQL.
</para>
</listitem>
@@ -614,6 +617,9 @@ GRANT admins TO joe;
<!## XC>
<productname>Postgres-XC</productname> allows an object owner to revoke his
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows an object owner to revoke his
+<!## end>
own ordinary privileges: for example, a table owner can make the table
read-only to himself by revoking his own <literal>INSERT</>,
<literal>UPDATE</>, <literal>DELETE</>, and <literal>TRUNCATE</>
@@ -624,6 +630,9 @@ GRANT admins TO joe;
<!## XC>
reason is that <productname>Postgres-XC</productname> treats the owner's
<!## end>
+<!## XL>
+ reason is that <productname>Postgres-XL</productname> treats the owner's
+<!## end>
privileges as having been granted by the owner to himself; therefore he
can revoke them too. In the SQL standard, the owner's privileges are
granted by an assumed entity <quote>_SYSTEM</>. Not being
@@ -644,6 +653,9 @@ GRANT admins TO joe;
<!## XC>
<productname>Postgres-XC</productname> extensions.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/gtm.sgmlin b/doc-xc/src/sgml/ref/gtm.sgmlin
index 36f0c70ca4..2694a04259 100644
--- a/doc-xc/src/sgml/ref/gtm.sgmlin
+++ b/doc-xc/src/sgml/ref/gtm.sgmlin
@@ -13,7 +13,8 @@ PostgreSQL documentation
<refnamediv>
<refname>gtm</refname>
<refpurpose>
- provides global transaction management feature to <productname>Postgres-XC</productname>.
+ provides global transaction management for the <productname>Postgres-XL</productname>
+ across the entire cluster.
</refpurpose>
</refnamediv>
@@ -32,16 +33,16 @@ PostgreSQL documentation
<title>
Description
</title>
-&xconly
+&xlonly
<para>
- gtm provides consistent transaction manager fully compatible with
+ gtm provides consistent transaction management fully compatible with
vanilla PostgreSQL. It is highly advised to start and stop gtm
using gtm_ctl(8).
</para>
<para>
- You must provide gtm configuration
- file <filename>gtm.conf</filename> placed at gtm working directory
+ You must provide a gtm configuration
+ file <filename>gtm.conf</filename> placed in the gtm working directory
as specified by <literal>-D</literal> command line option. The
configuration file specifies gtm running environment and resources.
</para>
@@ -51,12 +52,17 @@ PostgreSQL documentation
command line options.
</para>
+ <para>
+ As with other cluster components, the recommended method of
+ configuring and managing them is with the <xref linkend="pgxc-ctl"> utility.
+ </para>
+
</refsect1>
<refsect1>
<title>Configuration File</title>
-&xconly
+&xlonly
<para>
<literal>GTM</literal> configuration parameters are specified in the configuration file
<filename>gtm.conf</filename><indexterm><primary>gtm.conf</></> placed in the working directory
@@ -65,8 +71,8 @@ PostgreSQL documentation
in the next section.
</para>
<para>
- Format of the configuration file is the same as <filename>postgresql.conf</filename>.
- Options are as follows.
+ The format of the configuration file is patterned after the <filename>postgresql.conf</filename>.
+ The options are as follows.
</para>
<!-- Add description of each gtm.conf entry -->
@@ -92,7 +98,7 @@ PostgreSQL documentation
</indexterm>
<listitem>
<para>
- Specifies listen addresses (host name or IP address) of active <application>gtm</application>. This
+ Specifies the listen addresses (host name or IP address) of active <application>gtm</application>. This
parameter is effective only when this <application>gtm</application>
is specified as a standby. There is no default value for this parameter.
</para>
@@ -108,7 +114,8 @@ PostgreSQL documentation
<para>
Specifies the port number of active <application>gtm</application>. This
parameter is effective only when this <application>gtm</application>
- is specified as a standby.
+ is specified as a GTM standby. The standby connects to the primary gtm
+ to obtain a stream of updates of transaction status values.
There is no default value for this parameter.
</para>
</listitem>
@@ -123,8 +130,8 @@ PostgreSQL documentation
<para>
Specifies <literal>keepalives_count</literal> option for the
connection to <application>gtm</application>. This option is
- effective only when it runs as GTM-Standby.
- Default value is zero and keepalives feature is disabled.
+ effective only when it runs as GTM Standby.
+ The default value is zero and keepalives feature is disabled.
</para>
</listitem>
</varlistentry>
@@ -138,8 +145,8 @@ PostgreSQL documentation
<para>
Specifies <literal>keepalives_idle</literal> option for the
connection to <application>gtm</application>. This option is
- effective only when it runs as GTM-Standby.
- Default value is zero and keepalives feature is disabled.
+ effective only when it runs as GTM Standby.
+ The default value is zero and keepalives feature is disabled.
</para>
</listitem>
</varlistentry>
@@ -153,8 +160,8 @@ PostgreSQL documentation
<para>
Specifies <literal>keepalives_interval</literal> option for the
connection to <application>gtm</application>. This option is
- effective only when it runs as GTM-Standby.
- Default value is zero and keepalives feature is disabled.
+ effective only when it runs as GTM Standby.
+ The default value is zero and keepalives feature is disabled.
</para>
</listitem>
</varlistentry>
@@ -182,7 +189,7 @@ PostgreSQL documentation
<listitem>
<para>
Specifies <filename>log</filename> file name. This file will be
- created at the working directory of
+ created in the working directory of
this <application>gtm</application> as specified
by <literal>-D</literal> command line option.
The default is <filename>gtm.log</filename>.
@@ -266,7 +273,7 @@ PostgreSQL documentation
</indexterm>
<listitem>
<para>
- Specifies if backup to GTM-Standby is taken synchronously. If this is turned on,
+ Specifies if the backup to GTM-Standby is taken synchronously. If this is turned on,
GTM will send and receive synchronize message to make sure that all the backups
reached to the standby.
</para>
@@ -328,7 +335,7 @@ PostgreSQL documentation
<term><option>x</option></term>
<listitem>
<para>
- Specify global transaction ID to start with. This is needed
+ Specify the global transaction ID to start with. This is needed
when you start gtm for the first time
because <command>initdb</command> consumes XID locally and gtm
should start to give GXID greater than the last one
@@ -341,7 +348,7 @@ PostgreSQL documentation
run, initial global transaction ID value will be set to a
default initial value which is considered to be safe enough (in
version &version;, it is 10000). If many statements are
- involved in initdb, you should consider to specify larger
+ involved in initdb, you should consider to increasing this
value.
</para>
<para>
@@ -376,7 +383,7 @@ PostgreSQL documentation
</para>
<para>
- When starting GTM as a standby instance, following options can also be provided.
+ When starting GTM as a standby instance, the following options can also be provided.
</para>
<para>
diff --git a/doc-xc/src/sgml/ref/gtm_ctl.sgmlin b/doc-xc/src/sgml/ref/gtm_ctl.sgmlin
index 2c77f4d31f..4353b8f486 100644
--- a/doc-xc/src/sgml/ref/gtm_ctl.sgmlin
+++ b/doc-xc/src/sgml/ref/gtm_ctl.sgmlin
@@ -13,7 +13,7 @@ PostgreSQL documentation
<refnamediv>
<refname>gtm_ctl</refname>
<refpurpose>
- <productname>Postgres-XC</productname> GTM operation module
+ <productname>Postgres-XL</productname> GTM operation module
</refpurpose>
</refnamediv>
@@ -32,7 +32,7 @@ PostgreSQL documentation
<title>
Description
</title>
-&xconly
+&xlonly
<para>
<command>gtm_ctl</command> starts/stops <command>gtm</command>
or <command>gtm_proxy</command>. The options specify the GTM
diff --git a/doc-xc/src/sgml/ref/gtm_proxy.sgmlin b/doc-xc/src/sgml/ref/gtm_proxy.sgmlin
index fc09f3da2b..20a4e45b4b 100644
--- a/doc-xc/src/sgml/ref/gtm_proxy.sgmlin
+++ b/doc-xc/src/sgml/ref/gtm_proxy.sgmlin
@@ -13,7 +13,7 @@ PostgreSQL documentation
<refnamediv>
<refname>gtm_proxy</refname>
<refpurpose>
- Proxy to <command>gtm</command>, <productname>Postgres-XC</productname> Global Transaction Manager
+ Proxy to <command>gtm</command>, <productname>Postgres-XL</productname> Global Transaction Manager
</refpurpose>
</refnamediv>
@@ -32,12 +32,13 @@ PostgreSQL documentation
<title>
Description
</title>
-&xconly
+&xlonly
<para>
- Gtm proxy provides proxy feature from Postgres-XC Coordinator and
+ The Gtm proxy provides proxy feature from Postgres-XL Coordinator and
Datanode to gtm. Gtm proxy groups connections and interactions
- between gtm and other Postgres-XC components to reduce both the
- number of interactions and the size of messages.
+ between gtm and other Postgres-XL components to reduce both the
+ number of interactions and the size of messages. Performance tests
+ have shown greater performance with high concurrency workloads as a result.
</para>
<para>
@@ -45,8 +46,8 @@ PostgreSQL documentation
</para>
<para>
- You must provide gtm configuration
- file <filename>gtm_proxy.conf</filename> placed at gtm working directory
+ You must provide a gtm configuration
+ file <filename>gtm_proxy.conf</filename> placed at the gtm working directory
as specified by <literal>-D</literal> command line option. The
configuration file specifies gtm running environment and resources.
</para>
@@ -61,7 +62,7 @@ PostgreSQL documentation
<refsect1>
<title>Configuration File</title>
-&xconly
+&xlonly
<para>
<literal>GTM-Proxy</literal> configuration parameters are specified in the configuration file
<filename>gtm_proxy.conf</filename><indexterm><primary>gtm_proxy.conf</></> placed in the working directory
@@ -71,7 +72,7 @@ PostgreSQL documentation
</para>
<para>
- Format of the configuration file is the same as <filename>postgresql.conf</filename>.
+ The format of the configuration file is the same as <filename>postgresql.conf</filename>.
Options are as follows.
</para>
@@ -87,89 +88,9 @@ PostgreSQL documentation
documented later.
1. error_reporter
2. status_reader
- 3. err_wait_opt
- 4. err_wait_count
- 5. err_wait_interval
-->
<variablelist>
- <varlistentry id="gtm-proxy-opt-err-wait-count" xreflabel="gtm_proxy_opt_err_wait_count">
- <term><varname>err_wait_count</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>err_wait_count</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies how many times GTM-Proxy detects reconnect command from <application>gtm_ctl</application>
- when communication error with GTM is detected.
- Default value is zero.
- Refer to <varname>err_wait_idle</varname> and <varname>err_wait_interval</varname>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="gtm-proxy-opt-err-wait-idle" xreflabel="gtm_proxy_opt_err_wait_count">
- <term><varname>err_wait_idle</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>err_wait_idle</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies how long in second GTM-Proxy waits before it begin to detect reconnect
- from <application>gtm_ctl</application>
- when communication error with GTM is detected.
- Default value is zero.
- Refer to <varname>err_wait_count</varname> and <varname>err_wait_interval</varname>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="gtm-proxy-opt-err-wait-interval" xreflabel="gtm_proxy_opt_err_wait_interval">
- <term><varname>err_wait_interval</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>err_wait_interval</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies how long in second GTM-Proxy waits between each detection of reconnect
- from <application>gtm_ctl</application>
- when communication error with GTM is detected.
- Default value is zero.
- Refer to <varname>err_wait_count</varname> and <varname>err_wait_idle</varname>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="gtm-proxy-opt-gtm-connect-retry-count" xreflabel="gtm_proxy_opt_gtm_connect_retry_count">
- <term><varname>gtm_connect_retry_count</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>gtm_connect_retry_count</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies how many times GTM-Proxy retries to connect to GTM
- when communication error with GTM is detected.
- Default value is zero.
- Refer to <varname>gtm_connect_retry_idle</varname> and <varname>gtm_connect_retry_interval</varname>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="gtm-proxy-opt-gtm-connect-retry-idle" xreflabel="gtm_proxy_opt_gtm_connect_retry_idle">
- <term><varname>gtm_connect_retry_idle</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>gtm_connect_retry_idle</varname> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies how long in second GTM-Proxy waits before it retries to connect to GTM when
- communication error with GTM is detected.
- Default value is zero.
- Refer to <varname>gtm_connect_retry_count</varname> and <varname>gtm_connect_retry_interval</varname>.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry id="gtm-proxy-opt-gtm-connect-retry-interval" xreflabel="gtm_proxy_opt_gtm_connect_retry_interval">
<term><varname>gtm_connect_retry_interval</varname> (<type>integer</type>)</term>
<indexterm>
@@ -177,9 +98,9 @@ PostgreSQL documentation
</indexterm>
<listitem>
<para>
- Specifies how log in second GTM-Proxy waits between each retry to connect to GTM when
+ Specifies how long in seconds GTM-Proxy waits between each retry to connect to GTM when
communication error with GTM is detected.
- Default value is zero.
+ Default value is 60.
Refer to <varname>gtm_connect_retry_count</varname> and <varname>gtm_connect_retry_idle</varname>.
</para>
</listitem>
@@ -261,7 +182,7 @@ PostgreSQL documentation
<listitem>
<para>
Specifies <filename>log</filename> file name. This file will be
- created at the working directory of
+ created in the working directory of
this <application>gtm_proxy</application> as specified
by <literal>-D</literal> command line option.
The default is <filename>gtm_proxy.log</filename>.
@@ -324,7 +245,7 @@ PostgreSQL documentation
<listitem>
<para>
Specifies the port number of this <application>gtm_proxy</application>.
- Default port value is 6666.
+ The default port value is 6666.
</para>
</listitem>
</varlistentry>
@@ -337,7 +258,7 @@ PostgreSQL documentation
<listitem>
<para>
Specifies the number of worker threads for this <literal>gtm_proxy</literal>.
- Default value is 1.
+ The default value is 1.
</para>
</listitem>
</varlistentry>
@@ -392,7 +313,7 @@ PostgreSQL documentation
<term><option>p</option></term>
<listitem>
<para>
- Specify port number to listen.
+ Specify port number to listen on.
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/ref/initdb.sgmlin b/doc-xc/src/sgml/ref/initdb.sgmlin
index 5472a207d7..476d1ab3eb 100644
--- a/doc-xc/src/sgml/ref/initdb.sgmlin
+++ b/doc-xc/src/sgml/ref/initdb.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>create a new <productname>Postgres-XC</productname> Coordinator or Datanode database cluster</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>create a new <productname>Postgres-XL</productname> Coordinator or Datanode database cluster</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-initdb">
@@ -50,6 +53,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> database cluster for Coordinator or Datanode. A database
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database cluster for Coordinator or Datanode. A database
+<!## end>
cluster is a collection of databases that are managed by a single
server instance.
</para>
@@ -125,6 +131,13 @@ PostgreSQL documentation
performed for each Coordinators and Datanodes manually.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>initdb</> will be performed locally. This has to be
+ performed for each Coordinators and Datanodes manually.
+ </para>
+<!## end>
</refsect1>
@@ -175,6 +188,19 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>--nodename=<replaceable class="parameter">nodename</replaceable></option></term>
+ <listitem>
+ <para>
+ Set the name of Postgres-XL node initialized. This option is mandatory when setting a node.
+ It permits one to define the node itself in cluster node catalog
+ <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>. The node name
+ specified is also added in <filename>postgresql.conf</> as value of <varname>pgxc_node_name</>.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><option>-E <replaceable class="parameter">encoding</replaceable></option></term>
@@ -191,6 +217,9 @@ PostgreSQL documentation
<!## XC>
the <productname>Postgres-XC</productname> server are described
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</productname> server are described
+<!## end>
in <xref linkend="multibyte-charset-supported">.
</para>
</listitem>
@@ -369,6 +398,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
@@ -385,6 +417,13 @@ PostgreSQL documentation
run <command>initdb</> for each Coordinator and Datanode.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>initdb</> runs only locally. You should
+ run <command>initdb</> for each Coordinator and Datanode.
+ </para>
+<!## end>
&common;
<para>
<command>initdb</command> can also be invoked via
diff --git a/doc-xc/src/sgml/ref/initgtm.sgmlin b/doc-xc/src/sgml/ref/initgtm.sgmlin
index 0f74d0a50b..0679da8ce9 100644
--- a/doc-xc/src/sgml/ref/initgtm.sgmlin
+++ b/doc-xc/src/sgml/ref/initgtm.sgmlin
@@ -203,3 +203,203 @@ Postgres-XC documentation
</refentry>
<!## end>
+<!## XL>
+<refentry id="APP-INITGTM">
+ <refmeta>
+ <refentrytitle>initgtm</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo>Application</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>initgtm</refname>
+ <refpurpose>create a new <productname>Postgres-XL</productname> GTM or GTM-Proxy for database cluster</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="app-initgtm">
+ <primary>initgtm</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>initgtm</command>
+ <arg rep="repeat"><replaceable>option</replaceable></arg>
+ <group choice="plain">
+ <arg>--pgdata</arg>
+ <arg>-D </arg>
+ <replaceable>directory</replaceable>
+ </group>
+ <arg choice="plain">-Z <replaceable>nodetype</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R1-APP-INITGTM-1">
+ <title>
+ Description
+ </title>
+&common;
+ <para>
+ <command>initgtm</command> creates a new GTM or GTM-Proxy node for a
+ <productname>Postgres-XL</productname> database cluster. A database
+ cluster has a unique GTM. A GTM-Proxy acts as an intermediate component
+ between GTM and Postgres-XL nodes to group request messages. Each Coordinator
+ and Datanode of the cluster need to register to GTM when starting up.
+ </para>
+
+ <para>
+ Creating a GTM for cluster consists of creating the directories and files in
+ which the GTM data will live.
+ </para>
+
+ <para>
+ Although <command>initgtm</command> will attempt to create the
+ specified data directory, it might not have permission if the parent
+ directory of the desired data directory is root-owned. To initialize
+ in such a setup, create an empty data directory as root, then use
+ <command>chown</command> to assign ownership of that directory to the
+ database user account, then <command>su</command> to become the
+ database user to run <command>initgtm</command>.
+ </para>
+
+ <para>
+ <command>initgtm</command> must be run as the user that will own the
+ server process, because the server needs to have access to the
+ files and directories that <command>initgtm</command> creates.
+ Since the server cannot be run as root, you must not run
+ <command>initgtm</command> as root either. (It will in fact refuse
+ to do so.)
+ </para>
+
+&xlonly;
+ <para>
+ <command>initgtm</> will be performed locally.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><option>-D <replaceable class="parameter">directory</replaceable></option></term>
+ <term><option>--pgdata=<replaceable class="parameter">directory</replaceable></option></term>
+ <listitem>
+ <para>
+ This option specifies the directory where the GTM data
+ should be stored. Data folder and node type are the only information
+ required by <command>initgtm</command>. You can avoid writing it by
+ setting the <envar>PGDATA</envar> environment variable.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-Z <replaceable class="parameter">nodetype</replaceable></option></term>
+ <listitem>
+ <para>
+ This option specifies the node type which is initialized. It is possible to
+ specify gtm to set up a GTM node, or gtm_proxy to set up a GTM-Proxy.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </para>
+
+ <para>
+ Other, less commonly used, parameters are also available:
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-d</option></term>
+ <term><option>--debug</option></term>
+ <listitem>
+ <para>
+ Print debugging output from the bootstrap backend and a few other
+ messages of lesser interest for the general public.
+ The bootstrap backend is the program <command>initgtm</command>
+ uses to create the catalog tables. This option generates a tremendous
+ amount of extremely boring output.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-n</option></term>
+ <term><option>--noclean</option></term>
+ <listitem>
+ <para>
+ By default, when <command>initgtm</command>
+ determines that an error prevented it from completely creating GTM data
+ it removes any files it might have created before discovering
+ that it cannot finish the job. This option inhibits tidying-up and is
+ thus useful for debugging.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-V</></term>
+ <term><option>--version</></term>
+ <listitem>
+ <para>
+ Print the <application>initgtm</application> version and exit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-?</></term>
+ <term><option>--help</></term>
+ <listitem>
+ <para>
+ Show help about <application>initgtm</application> command line
+ arguments, and exit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Environment</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><envar>PGDATA</envar></term>
+
+ <listitem>
+ <para>
+ Specifies the directory where the GTM data is to be
+ stored; can be overridden using the <option>-D</option> option.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Notes</title>
+
+&xlonly;
+ <para>
+ <command>initgtm</> runs only locally.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+
+ <simplelist type="inline">
+ <member><xref linkend="app-gtm-ctl"></member>
+ </simplelist>
+ </refsect1>
+
+</refentry>
+<!## end>
diff --git a/doc-xc/src/sgml/ref/listen.sgmlin b/doc-xc/src/sgml/ref/listen.sgmlin
index f0c3c95dc0..24802b26f6 100644
--- a/doc-xc/src/sgml/ref/listen.sgmlin
+++ b/doc-xc/src/sgml/ref/listen.sgmlin
@@ -35,6 +35,13 @@ LISTEN <replaceable class="PARAMETER">channel</replaceable>
in <productname>Postgres-XC</> yet.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <command>LISTEN</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/ref/load.sgmlin b/doc-xc/src/sgml/ref/load.sgmlin
index a1d6541e6a..881b95800a 100644
--- a/doc-xc/src/sgml/ref/load.sgmlin
+++ b/doc-xc/src/sgml/ref/load.sgmlin
@@ -60,8 +60,8 @@ LOAD '<replaceable class="PARAMETER">filename</replaceable>'
are installed there.)
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Please note that <command>LOAD</command> command loads library only
locally. You should load library manually in each Datanode and
@@ -70,6 +70,16 @@ LOAD '<replaceable class="PARAMETER">filename</replaceable>'
Datanodes and Coordinators.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Please note that <command>LOAD</command> command loads the library only
+ locally. You should load library manually on each Datanode and
+ Coordinator (you can use psql directly to Datanodes for this
+ puupose), or <filename>edit postgresql.conf</filename> for all the
+ Datanodes and Coordinators.
+ </para>
+<!## end>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/notify.sgmlin b/doc-xc/src/sgml/ref/notify.sgmlin
index 1ba303bb02..700690e0e3 100644
--- a/doc-xc/src/sgml/ref/notify.sgmlin
+++ b/doc-xc/src/sgml/ref/notify.sgmlin
@@ -35,6 +35,13 @@ NOTIFY <replaceable class="PARAMETER">channel</replaceable> [ , <replaceable cla
in <productname>Postgres-XC</> yet.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>The NOTIFY</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
<!## PG>
diff --git a/doc-xc/src/sgml/ref/pause_cluster.sgmlin b/doc-xc/src/sgml/ref/pause_cluster.sgmlin
new file mode 100644
index 0000000000..6d0e31e705
--- /dev/null
+++ b/doc-xc/src/sgml/ref/pause_cluster.sgmlin
@@ -0,0 +1,70 @@
+<!--
+doc/src/sgml/ref/pause_cluster.sgml
+PostgreSQL documentation
+-->
+<!## XL>
+<refentry id="SQL-PAUSECLUSTER">
+ <refmeta>
+ <refentrytitle>PAUSE CLUSTER</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>PAUSE CLUSTER</refname>
+ <refpurpose>pause the <productname>Postgres-XL</productname> cluster</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-pausecluster">
+ <primary>PAUSE CLUSTER</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+PAUSE CLUSTER
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>PAUSE CLUSTER </command> is a SQL command specific
+ to <productname>Postgres-XL</productname> that pauses
+ cluster operation.
+ </para>
+ <para>
+ Pause blocks any new transactions from starting and waits until
+ existing transactions complete, then returns. Existing sessions
+ are still connected to Coordinators, it is just that any new statements
+ will be held up and not be executed.
+ </para>
+
+ <para>
+ The session that paused the cluster can perform tasks exclusively on the
+ cluster. This is useful for maintenance tasks to resolve a problem,
+ restart a Datanode, manually failover a Datanode, etc. Applications will
+ not receive error messages unless they themselves timeout, statement execution
+ will just be briefly suspended.
+ </para>
+
+ <para>
+ Once the DBA has completed whatever tasks were needed, the command <xref linkend="sql-unpausecluster"> can be used.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>PAUSE CLUSTER</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
+
diff --git a/doc-xc/src/sgml/ref/pg_config-ref.sgmlin b/doc-xc/src/sgml/ref/pg_config-ref.sgmlin
index eb79ac929b..39c8a05d5e 100644
--- a/doc-xc/src/sgml/ref/pg_config-ref.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_config-ref.sgmlin
@@ -15,6 +15,9 @@
<!## XC>
<refpurpose>retrieve information about the installed version of <productname>Postgres-XC</></refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>retrieve information about the installed version of <productname>Postgres-XL</></refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-pgconfig">
@@ -41,6 +44,9 @@
<!## XC>
of the currently installed version of <productname>Postgres-XC</>. It is
<!## end>
+<!## XL>
+ of the currently installed version of <productname>Postgres-XL</>. It is
+<!## end>
intended, for example, to be used by software packages that want to interface
<!## PG>
to <productname>PostgreSQL</> to facilitate finding the required header files
@@ -48,6 +54,9 @@
<!## XC>
to <productname>Postgres-XC</> to facilitate finding the required header files
<!## end>
+<!## XL>
+ to <productname>Postgres-XL</> to facilitate finding the required header files
+<!## end>
and libraries.
</para>
</refsect1>
@@ -149,6 +158,9 @@
<!## XC>
<productname>Postgres-XC</> was built.)
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> was built.)
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -200,6 +212,9 @@
<!## XC>
script when <productname>Postgres-XC</> was configured for building.
<!## end>
+<!## XL>
+ script when <productname>Postgres-XL</> was configured for building.
+<!## end>
This can be used to reproduce the identical configuration, or
to find out with what options a binary package was built. (Note
however that binary packages often contain vendor-specific custom
@@ -219,6 +234,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows the C compiler used.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows the C compiler used.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -234,6 +252,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows C compiler switches needed
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows C compiler switches needed
+<!## end>
at preprocessing time (typically, <literal>-I</> switches).
</para>
</listitem>
@@ -250,6 +271,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows C compiler switches.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows C compiler switches.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -265,6 +289,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows extra C compiler switches
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows extra C compiler switches
+<!## end>
used for building shared libraries.
</para>
</listitem>
@@ -281,6 +308,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows linker switches.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows linker switches.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -296,6 +326,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows linker switches
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows linker switches
+<!## end>
used for building executables only.
</para>
</listitem>
@@ -312,6 +345,9 @@
<!## XC>
<productname>Postgres-XC</>. This shows linker switches
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This shows linker switches
+<!## end>
used for building shared libraries only.
</para>
</listitem>
@@ -330,6 +366,10 @@
<productname>Postgres-XC</>. This normally contains <literal>-l</>
switches for external libraries linked into <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. This normally contains <literal>-l</>
+ switches for external libraries linked into <productname>Postgres-XL</>.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -344,6 +384,9 @@
<!## XC>
Print the version of <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ Print the version of <productname>Postgres-XL</>.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -398,6 +441,9 @@
<!## XC>
To reproduce the build configuration of the current Postgres-XC
<!## end>
+<!## XL>
+ To reproduce the build configuration of the current Postgres-XL
+<!## end>
installation, run the following command:
<programlisting>
eval ./configure `pg_config --configure`
diff --git a/doc-xc/src/sgml/ref/pg_controldata.sgmlin b/doc-xc/src/sgml/ref/pg_controldata.sgmlin
index 5ce721aae3..9a507017f4 100644
--- a/doc-xc/src/sgml/ref/pg_controldata.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_controldata.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose>display control information of a Coordinator or Datanode database cluster of <productname>Postgres-XC</productname></refpurpose>
<!## end>
+<!## XL>
+ <refpurpose>display control information of a Coordinator or Datanode database cluster of <productname>Postgres-XL</productname></refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-pgcontroldata">
@@ -62,6 +65,13 @@ PostgreSQL documentation
issue <command>pg_controldata</> against each of them.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ To print information of each Datanode and Coordinator, you should
+ issue <command>pg_controldata</> against each of them.
+ </para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/pg_ctl-ref.sgmlin b/doc-xc/src/sgml/ref/pg_ctl-ref.sgmlin
index daa57b6060..10f418199e 100644
--- a/doc-xc/src/sgml/ref/pg_ctl-ref.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_ctl-ref.sgmlin
@@ -42,6 +42,9 @@ PostgreSQL documentation
<!## XC>
<arg>-Z <replaceable>nodeopt</replaceable></arg>
<!## end>
+<!## XL>
+ <arg>-Z <replaceable>nodeopt</replaceable></arg>
+<!## end>
</cmdsynopsis>
<cmdsynopsis>
@@ -79,6 +82,9 @@ PostgreSQL documentation
<!## XC>
<arg>-Z <replaceable>nodeopt</replaceable></arg>
<!## end>
+<!## XL>
+ <arg>-Z <replaceable>nodeopt</replaceable></arg>
+<!## end>
</cmdsynopsis>
<cmdsynopsis>
@@ -348,9 +354,31 @@ PostgreSQL documentation
<term><option>-Z <replaceable class="parameter">nodeopt</replaceable></option></term>
<listitem>
<para>
- Specifies to run node as a Coordinator or as a Datanode.
+ Specifies to run node as a Coordinator, as a Datanode or in restore mode.
<replaceable>nodeopt</replaceable> can be respectively
- <literal>coordinator</literal> or <literal>datanode</literal>.
+ <literal>coordinator</literal>, <literal>datanode</literal> or
+ <literal>restoremode</literal>.
+ </para>
+ <para>
+ With restore mode, you can import Postgres-XC's catalog data from other coordinator
+ or datanode
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>-Z <replaceable class="parameter">nodeopt</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies to run node as a Coordinator, as a Datanode or in restore mode.
+ <replaceable>nodeopt</replaceable> can be respectively
+ <literal>coordinator</literal>, <literal>datanode</literal> or
+ <literal>restoremode</literal>.
+ </para>
+ <para>
+ With restore mode, you can import Postgres-XL's catalog data from other coordinator
+ or datanode
</para>
</listitem>
</varlistentry>
@@ -487,6 +515,11 @@ PostgreSQL documentation
This command controls individual Coordinator or Datanode.
</para>
<!## end>
+<!## XL>
+ <para>
+ This command controls individual Coordinator or Datanode.
+ </para>
+<!## end>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/pg_dump.sgmlin b/doc-xc/src/sgml/ref/pg_dump.sgmlin
index 065f14dda1..7ffe2ba114 100644
--- a/doc-xc/src/sgml/ref/pg_dump.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_dump.sgmlin
@@ -856,6 +856,19 @@ PostgreSQL documentation
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><option>--include-nodes</></term>
+ <listitem>
+ <para>
+ &xlonly;
+ Include <command>TO NODE</> clause in the <command>CREATE TABLE</>
+ command when producing the dump. When used while taking the dump
+ from a datanode, the option does nothing.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/pg_dumpall.sgmlin b/doc-xc/src/sgml/ref/pg_dumpall.sgmlin
index 79394e3294..8eb33944f2 100644
--- a/doc-xc/src/sgml/ref/pg_dumpall.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_dumpall.sgmlin
@@ -390,6 +390,17 @@ PostgreSQL documentation
</varlistentry>
<varlistentry>
+ <term><option>--dump-nodes</></term>
+ <listitem>
+ <para>
+ &xlonly;
+ Output commands to create nodes and node groups. This option may be used
+ while adding a new coordinator to an existing <productname>Postgres-XL</> cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-?</></term>
<term><option>--help</></term>
<listitem>
diff --git a/doc-xc/src/sgml/ref/pg_resetxlog.sgmlin b/doc-xc/src/sgml/ref/pg_resetxlog.sgmlin
index 009447b261..8ea005357b 100644
--- a/doc-xc/src/sgml/ref/pg_resetxlog.sgmlin
+++ b/doc-xc/src/sgml/ref/pg_resetxlog.sgmlin
@@ -204,14 +204,22 @@ PostgreSQL documentation
so, make doubly certain that there is no server process still alive.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
In <productname>Postgres-XC</>, <command>pg_resetxlog</command>
will run only for local Coordinator or Datanode. You should run it
for each Coordinator or Datanode manually.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, <command>pg_resetxlog</command>
+ will only run locally for Coordinators and Datanodes. You should run it
+ for each Coordinator or Datanode manually.
+ </para>
+<!## end>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/pgxc_clean-ref.sgmlin b/doc-xc/src/sgml/ref/pgxc_clean-ref.sgmlin
new file mode 100644
index 0000000000..577633e2d2
--- /dev/null
+++ b/doc-xc/src/sgml/ref/pgxc_clean-ref.sgmlin
@@ -0,0 +1,226 @@
+<!--
+doc/src/sgml/ref/psql-ref.sgml
+PostgreSQL documentation
+-->
+
+<refentry id="APP-PGXC-CLEAN">
+ <refmeta>
+ <refentrytitle><application>pgxc_clean</application></refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo>Application</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname><application>pgxc_clean</application></refname>
+ <refpurpose>
+ <productname>Postgres-XC</productname> interactive terminal
+ </refpurpose>
+ </refnamediv>
+
+ <indexterm zone="app-pgxc-clean">
+ <primary>pgxc_clean</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>pgxc_clean</command>
+ <arg rep="repeat"><replaceable class="parameter">option</replaceable></arg>
+ <arg><replaceable class="parameter">dbname</replaceable>
+ <arg><replaceable class="parameter">username</replaceable></arg></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xconly;
+
+ <para>
+ <application>pgxc_clean</application> is Postgres-XC utility to maintain transaction status after a crash.
+ When some Postgres-XC node crashes and recovers or fails over, commit status of such node may be inconsistent
+ with other nodes. <application>pgxc_clean</application> checks transaction commit status and corrects them.
+ </para>
+ <para>
+ You should run this utility against one of the available coordinators. THe tool cleans up transaction status
+ of all the nodes automatically.
+ </para>
+ </refsect1>
+
+ <refsect1 id="R1-APP-PGXC-CLEAN-3">
+ <title>Options</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-a</></term>
+ <term><option>--all</></term>
+ <listitem>
+ <para>
+ Cleanup all the database available.
+ <literal>all</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-d<replaceable class="parameter">databasename</replaceable></option></term>
+ <term><option>--dbname=<replaceable class="parameter">databasename</replaceable></option></term>
+ <listitem>
+ <para>
+ Database name to clean up. This option can be specified multiple times for more than one database.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-h<replaceable class="parameter">hostname</replaceable></></term>
+ <term><option>--command=<replaceable class="parameter">hostname</replaceable></></term>
+ <listitem>
+ <para>
+ Hostname of the coordinator to connect to.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-N</></term>
+ <term><option>--no-clean</></term>
+ <listitem>
+ <para>
+ If this option is specified, <application>pgxc_clean</> will
+ not perform the cleanup. It just investigates transaction status.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-o <replaceable class="parameter">filename</replaceable></></term>
+ <term><option>--output=<replaceable class="parameter">filename</replaceable></></term>
+ <listitem>
+ <para>
+ Name of the file where <application>pgxc_clean</> output will
+ be written. If not specified, stdout and stderr will be used.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-p <replaceable class="parameter">port_number</replaceable></></term>
+ <term><option>--port=<replaceable class="parameter">port_number</replaceable></></term>
+ <listitem>
+ <para>
+ Specifies the port number of the coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-q</></term>
+ <term><option>--quiet</></term>
+ <listitem>
+ <para>
+ Surpress messages as much as possible.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-s</></term>
+ <term><option>--status</></term>
+ <listitem>
+ <para>
+ Prints investigated two phase commit status.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-U <replaceable class="parameter">username</replaceable></></term>
+ <term><option>--username=<replaceable class="parameter">username</replaceable></></term>
+ <listitem>
+ <para>
+ User name to use. You must be a superuser of the database.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-v</></term>
+ <term><option>--verbose</></term>
+ <listitem>
+ <para>
+ Write as much information as possible.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-V</></term>
+ <term><option>--version</></term>
+ <listitem>
+ <para>
+ Writes the version of the utility and exits.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-w</></term>
+ <term><option>--no-password</></term>
+ <listitem>
+ <para>
+ Never issue a password prompt. If the server requires password
+ authentication and a password is not available by other means
+ such as a <filename>.pgpass</filename> file, the connection
+ attempt will fail. This option can be useful in batch jobs and
+ scripts where no user is present to enter a password.
+ </para>
+
+ <para>
+ Note that this option will remain set for the entire session,
+ and so it affects uses of the meta-command
+ <command>\connect</command> as well as the initial connection attempt.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-W</></term>
+ <term><option>--password</></term>
+ <listitem>
+ <para>
+ Force <application>psql</application> to prompt for a
+ password before connecting to a database.
+ </para>
+
+ <para>
+ This option is never essential, since <application>psql</application>
+ will automatically prompt for a password if the server demands
+ password authentication. However, <application>psql</application>
+ will waste a connection attempt finding out that the server wants a
+ password. In some cases it is worth typing <option>-W</> to avoid
+ the extra connection attempt.
+ </para>
+
+ <para>
+ Note that this option will remain set for the entire session,
+ and so it affects uses of the meta-command
+ <command>\connect</command> as well as the initial connection attempt.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-?</></term>
+ <term><option>--help</></term>
+ <listitem>
+ <para>
+ Show help about <application>psql</application> command line
+ arguments, and exit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+</refentry>
diff --git a/doc-xc/src/sgml/ref/pgxc_ddl.sgmlin b/doc-xc/src/sgml/ref/pgxc_ddl.sgmlin
new file mode 100644
index 0000000000..4397805dee
--- /dev/null
+++ b/doc-xc/src/sgml/ref/pgxc_ddl.sgmlin
@@ -0,0 +1,313 @@
+<!--
+$PostgreSQL: pgsql/doc/src/sgml/ref/initdb.sgml,v 1.47 2010/04/03 07:23:01 petere Exp $
+PostgreSQL documentation
+-->
+
+<refentry id="APP-PGXC-DDL">
+ <refmeta>
+ <refentrytitle>pgxc_ddl</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo>Application</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgxc_ddl</refname>
+ <refpurpose>
+ Coordinator catalog table synchronization and DDL treatment module
+ </refpurpose>
+ </refnamediv>
+
+ <indexterm zone="app-pgxc-ddl">
+ <primary>pgxc_ddl</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>pgxc_ddl</command>
+ <arg rep="repeat"><replaceable>option</></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R1-APP-PGXC-DDL-1">
+ <title>
+ Description
+ </title>
+&xconly
+ <para>
+ pgxc_ddl is used to synchronize all coordinator catalog tables from
+one chosen by a user. It is also possible to launch a DDL on one
+coordinator, and then to synchronize all the coordinator catalog
+tables from the catalog table of the coordinator having received the
+DDL. Copy method is cold-based. All the coordinators are stopped,
+catalog files are copied, then all the coordinators are restarted.
+ </para>
+
+ <para>
+ Since <productname>Postgres-XC</productname> 0.9.3, DDL are
+ synchronized automatically on all the nodes of the
+ cluster, <command>pgxc_ddl</command> is let on purpose of future
+ feature development.
+ </para>
+
+ <para>
+ Since <productname>Postgres-XC</productname> 0.9.4, pgxc_ddl and
+ pgxc.conf are not anymore installed by default. Scripts are saved
+ in the folder <filename>src/pgxc/bin/pgxc_ddl</filename>.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>
+ Options are specified with preceding '<literal>-</literal>', each
+ option may be associated with a value.
+ </para>
+
+ <para>
+ Options are as follows:
+ </para>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><option>D</option></term>
+ <listitem>
+ <para>
+ Specify <filename>pgxc.conf</filename> folder, for
+ characteristics of all the coordinators.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>l</option></term>
+ <listitem>
+ <para>
+ Specify application folder, in case <varname>PATH</varname> is not defined.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>f</option></term>
+ <listitem>
+ <para>
+ Specify DDL file location.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>d</option></term>
+ <listitem>
+ <para>
+ Database name.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>n</option></term>
+ <listitem>
+ <para>
+ Coordinator number. Coordinator chosen corresponds to the one
+ defined in <filename>pgxc.conf</filename> at the nth place.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>t</option></term>
+ <listitem>
+ <para>
+ Specify temporary folder where to copy the configuration files
+ postgresql.conf and pg_hba.conf for each coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </para>
+
+ <para>
+ <command>gtm_ctl</command> issues the following keywords to select
+ operations on <command>gtm</command>
+ and <command>gtm_proxy</command>.
+ </para>
+
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><option>start</option></term>
+ <listitem>
+ <para>
+ Start a GTM/GTM proxy instance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>restart</option></term>
+ <listitem>
+ <para>
+ Restart a GTM/GTM proxy instance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>stop</option></term>
+ <listitem>
+ <para>
+ Stop a GTM/GTM proxy instance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>status</option></term>
+ <listitem>
+ <para>
+ Look at the status of GTM instance. If active, 1 is printed. If
+ standby, 0 is printed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>promote</option></term>
+ <listitem>
+ <para>
+ Promote a GTM instance as active.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>reconnect</option></term>
+ <listitem>
+ <para>
+ Reconnect a GTM Proxy to another GTM instance.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </para>
+
+ <para>
+ Typically, you can issue the following command to start <command>gtm</command>/
+<programlisting>
+gtm_ctl start -S gtm -D datafolder
+</programlisting>
+ </para>
+
+ <para>
+ Or <command>gtm_proxy</command>:
+<programlisting>
+gtm_ctl start -S gtm_proxy -D datafolder_proxy
+</programlisting>
+ </para>
+
+ <para>
+ Promote a GTM as active:
+<programlisting>
+gtm_ctl promote -S gtm -D datafolder
+</programlisting>
+ </para>
+
+ <para>
+ Reconnect a GTM proxy to another GTM instance:
+<programlisting>
+gtm_ctl reconnect -S gtm_proxy -D datafolder_proxy -o '-s hostname -t port_number'
+</programlisting>
+ </para>
+
+ <para>
+ Look at the status of a GTM server:
+<programlisting>
+gtm_ctl status -S gtm -D datafolder
+</programlisting>
+ </para>
+ </refsect1>
+
+ <refsect1 id="R1-APP-PGXC-DDL-2">
+ <title>
+ Configuration
+ </title>
+&xconly
+ <para>
+ Because <command>pgxc_ddl</command> requires access to coordinator
+ configuration file and data folders, the following parameters have
+ to be set in <filename>pgxc.conf</filename>:
+ </para>
+
+ <table>
+ <title><filename>pgxc.conf</filename> entries</title>
+
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>coordinator_ports</varname></entry>
+ <entry>string</entry>
+ <entry>
+ Specify the port number of all the coordinators. Maintain the
+ order of the value same as those in coordinator_hosts. It is
+ necessary to specify a number of ports equal to the number of
+ hosts. A comma separator is also necessary.
+ </entry>
+ </row>
+
+ <row>
+ <entry><varname>coordinator_folders</varname></entry>
+ <entry>string</entry>
+ <entry>
+ Specify the data folders of all the coordinators. Maintain the
+ order of the value same as those in coordinator_hosts. It is
+ necessary to specify a number of data folders equal to the
+ number of hosts. A comma separator is also necessary.
+ </entry>
+ </row>
+
+ <row>
+ <entry><varname>coordinator_hosts</varname></entry>
+ <entry>string</entry>
+ <entry>
+ Specify the host name or IP address of coordinator. Separate
+ each value with comma.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <note>
+ <para>
+ About the temporary folder, this one has the name chosen by the
+ user. As an extension name, the PID of the shell script is
+ added. This folder is by definition in /tmp. The user can choose
+ the name freely.
+ </para>
+ </note>
+
+ <note>
+ <para>
+ Configuration files of coordinators that have their catalog files
+ changed are defined with an extension name postgresql.conf.number,
+ "number" being the number of t coordinator in the order defined
+ in <filename>pgxc.conf</filename>.
+ </para>
+ </note>
+ </refsect1>
+</refentry>
diff --git a/doc-xc/src/sgml/ref/postgres-ref.sgmlin b/doc-xc/src/sgml/ref/postgres-ref.sgmlin
index 43c4c933c6..835bddca14 100644
--- a/doc-xc/src/sgml/ref/postgres-ref.sgmlin
+++ b/doc-xc/src/sgml/ref/postgres-ref.sgmlin
@@ -22,6 +22,12 @@ PostgreSQL documentation
<refpurpose><productname>Postgres-XC</productname> database server</refpurpose>
</refnamediv>
<!## end>
+<!## XL>
+ <refnamediv>
+ <refname>postgres</refname>
+ <refpurpose><productname>Postgres-XL</productname> database server</refpurpose>
+ </refnamediv>
+<!## end>
<indexterm zone="app-postgres">
<primary>postgres</primary>
@@ -47,6 +53,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> database server. In order
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database server. In order
+<!## end>
for a client application to access a database it connects (over a
network or locally) to a running <command>postgres</command> instance.
The <command>postgres</command> instance then starts a separate server
@@ -129,6 +138,9 @@ PostgreSQL documentation
<!## XC>
assertions were enabled when <productname>Postgres-XC</> was
<!## end>
+<!## XL>
+ assertions were enabled when <productname>Postgres-XL</> was
+<!## end>
compiled. If so, the default is on.
</para>
</listitem>
@@ -158,6 +170,17 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>--coordinator</option></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specifies postgres server should run as a Coordinator.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><option>-c <replaceable>name</replaceable>=<replaceable>value</replaceable></option></term>
@@ -170,6 +193,9 @@ PostgreSQL documentation
<!## XC>
supported by <productname>Postgres-XC</productname> are
<!## end>
+<!## XL>
+ supported by <productname>Postgres-XL</productname> are
+<!## end>
described in <xref linkend="runtime-config">. Most of the
other command line options are in fact short forms of such a
parameter assignment. <option>-c</> can appear multiple times
@@ -288,6 +314,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> must have been compiled with
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> must have been compiled with
+<!## end>
support for <acronym>SSL</acronym> for this option to be
available. For more information on using <acronym>SSL</acronym>,
refer to <xref linkend="ssl-tcp">.
@@ -378,6 +407,17 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>--datanode</option></term>
+ <listitem>
+&xlonly;
+ <para>
+ Specifies postgres server should run as a Datanode.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
<varlistentry>
<term><option>--<replaceable>name</replaceable>=<replaceable>value</replaceable></option></term>
@@ -416,6 +456,9 @@ PostgreSQL documentation
<!## XC>
here only for use by <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ here only for use by <productname>Postgres-XL</productname>
+<!## end>
system developers. Furthermore, these options might
change or be removed in a future release without notice.
</para>
@@ -547,6 +590,20 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<!## end>
+<!## XL>
+ <varlistentry>
+ <term><option>--localxid</option></term>
+ <listitem>
+ &xlonly;
+ <para>
+ Use local transaction IDs rather than GXID. This option applies
+ only to <productname>Postgres-XL</productname>. It is only
+ used by initdb. Explicit use of this option may cause
+ database inconsistency.
+ </para>
+ </listitem>
+ </varlistentry>
+<!## end>
</variablelist>
</refsect2>
@@ -688,6 +745,9 @@ PostgreSQL documentation
<!## XC>
consumption of <productname>Postgres-XC</>, and/or by reducing
<!## end>
+<!## XL>
+ consumption of <productname>Postgres-XL</>, and/or by reducing
+<!## end>
<xref linkend="guc-max-connections"> to reduce the semaphore
consumption.
</para>
@@ -716,6 +776,9 @@ PostgreSQL documentation
<!## XC>
non-<productname>Postgres-XC</productname> process. You might also
<!## end>
+<!## XL>
+ non-<productname>Postgres-XL</productname> process. You might also
+<!## end>
get this error if you terminate <command>postgres</command>
and immediately restart it using the same port; in this case, you
must simply wait a few seconds until the operating system closes
@@ -842,12 +905,16 @@ PostgreSQL documentation
<refsect1 id="app-postgres-examples">
<title>Examples</title>
-&xconly;
<para>
<!## PG>
To start <command>postgres</command> in the background
<!## end>
<!## XC>
+&xconly;
+ To start <command>postgres</command> as a Datanode in the background
+<!## end>
+<!## XL>
+&xlonly;
To start <command>postgres</command> as a Datanode in the background
<!## end>
using default values, type:
@@ -862,6 +929,11 @@ PostgreSQL documentation
<prompt>$</prompt> <userinput>nohup postgres --datanode &gt;logfile 2&gt;&amp;1 &lt;/dev/null &amp;</userinput>
</screen>
<!## end>
+<!## XL>
+<screen>
+<prompt>$</prompt> <userinput>nohup postgres --datanode &gt;logfile 2&gt;&amp;1 &lt;/dev/null &amp;</userinput>
+</screen>
+<!## end>
</para>
<para>
@@ -871,6 +943,9 @@ PostgreSQL documentation
<!## XC>
To start <command>postgres</command> as a Coordinator with a specific
<!## end>
+<!## XL>
+ To start <command>postgres</command> as a Coordinator with a specific
+<!## end>
port, e.g. 1234:
<!## PG>
<screen>
@@ -882,6 +957,11 @@ PostgreSQL documentation
<prompt>$</prompt> <userinput>postgres --coordinator -p 1234</userinput>
</screen>
<!## end>
+<!## XL>
+<screen>
+<prompt>$</prompt> <userinput>postgres --coordinator -p 1234</userinput>
+</screen>
+<!## end>
To connect to this server using <application>psql</>, specify this port with the -p option:
<screen>
<prompt>$</prompt> <userinput>psql -p 1234</userinput>
@@ -907,6 +987,12 @@ PostgreSQL documentation
<prompt>$</prompt> <userinput>postgres --coordinator --work-mem=1234</userinput>
</screen>
<!## end>
+<!## XL>
+<screen>
+<prompt>$</prompt> <userinput>postgres --coordinator -c work_mem=1234</userinput>
+<prompt>$</prompt> <userinput>postgres --coordinator --work-mem=1234</userinput>
+</screen>
+<!## end>
Either form overrides whatever setting might exist for
<varname>work_mem</> in <filename>postgresql.conf</>. Notice that
underscores in parameter names can be written as either underscore
diff --git a/doc-xc/src/sgml/ref/postmaster.sgmlin b/doc-xc/src/sgml/ref/postmaster.sgmlin
index f1c83e3d24..1de541d00e 100644
--- a/doc-xc/src/sgml/ref/postmaster.sgmlin
+++ b/doc-xc/src/sgml/ref/postmaster.sgmlin
@@ -18,6 +18,9 @@ PostgreSQL documentation
<!## XC>
<refpurpose><productname>Postgres-XC</productname> database server for Coordinator or Datanode</refpurpose>
<!## end>
+<!## XL>
+ <refpurpose><productname>Postgres-XL</productname> database server for Coordinator or Datanode</refpurpose>
+<!## end>
</refnamediv>
<indexterm zone="app-postmaster">
diff --git a/doc-xc/src/sgml/ref/prepare_transaction.sgmlin b/doc-xc/src/sgml/ref/prepare_transaction.sgmlin
index a6a10543dd..150f660393 100644
--- a/doc-xc/src/sgml/ref/prepare_transaction.sgmlin
+++ b/doc-xc/src/sgml/ref/prepare_transaction.sgmlin
@@ -134,7 +134,21 @@ PREPARE TRANSACTION <replaceable class="PARAMETER">transaction_id</replaceable>
&xconly;
<para>
Transaction id beginning with <literal>_$XC$</literal> is reserved by COORDINATOR for
- internal use. You cannot use this form of transaction_id externaly.
+ internal use. You cannot use this form of transaction_id externally.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If the transaction is involved by more than one Datanode and/or
+ Coordinator, <command>COMMIT PREPARED</> will be propagated to
+ these nodes.
+ </para>
+
+&xlonly;
+ <para>
+ Transaction id beginning with <literal>_$XL$</literal> is reserved by COORDINATOR for
+ internal use. You cannot use this form of transaction_id externally.
</para>
<!## end>
diff --git a/doc-xc/src/sgml/ref/psql-ref.sgmlin b/doc-xc/src/sgml/ref/psql-ref.sgmlin
index 17629e4ce7..886069b4f0 100644
--- a/doc-xc/src/sgml/ref/psql-ref.sgmlin
+++ b/doc-xc/src/sgml/ref/psql-ref.sgmlin
@@ -19,6 +19,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> interactive terminal
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> interactive terminal
+<!## end>
</refpurpose>
</refnamediv>
@@ -52,6 +55,11 @@ PostgreSQL documentation
queries interactively, issue them to
<productname>Postgres-XC</productname>, and see the query results.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. It enables you to type in
+ queries interactively, issue them to
+ <productname>Postgres-XL</productname>, and see the query results.
+<!## end>
Alternatively, input can be from a file. In addition, it provides a
number of meta-commands and various shell-like features to
facilitate writing scripts and automating a wide variety of tasks.
@@ -567,6 +575,9 @@ PostgreSQL documentation
<!## XC>
<productname>Postgres-XC</productname> client application. In order
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> client application. In order
+<!## end>
to connect to a database you need to know the name of your target
database, the host name and port number of the server, and what user
name you want to connect as. <application>psql</application> can be
@@ -765,6 +776,9 @@ testdb=&gt;
<!## XC>
Establishes a new connection to a <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ Establishes a new connection to a <productname>Postgres-XL</>
+<!## end>
server. If the new connection is successfully made, the
previous connection is closed. If any of <replaceable
class="parameter">dbname</replaceable>, <replaceable
@@ -905,6 +919,9 @@ testdb=&gt;
<!## XC>
<productname>Postgres-XC</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>.
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -1050,6 +1067,16 @@ testdb=&gt;
(1 row)
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+=&gt; <userinput>\dd version</userinput>
+ Object descriptions
+ Schema | Name | Object | Description
+------------+---------+----------+---------------------------
+ pg_catalog | version | function | Postgres-XL version string
+(1 row)
+</programlisting>
+<!## end>
</para>
<para>
@@ -1726,6 +1753,9 @@ Tue Oct 26 21:40:57 CEST 1999
<!## XC>
Stores the file into a <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ Stores the file into a <productname>Postgres-XL</productname>
+<!## end>
large object. Optionally, it associates the given
comment with the object. Example:
<programlisting>
@@ -1759,6 +1789,9 @@ lo_import 152801
<!## XC>
Shows a list of all <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ Shows a list of all <productname>Postgres-XL</productname>
+<!## end>
large objects currently stored in the database,
along with any comments provided for them.
</para>
@@ -2602,6 +2635,10 @@ bar
The autocommit-on mode is <productname>Postgres-XC</>'s traditional
behavior inherited from <productname>PostgreSQL</>, but autocommit-off is closer to the SQL spec. If you
<!## end>
+<!## XL>
+ The autocommit-on mode is <productname>Postgres-XL</>'s traditional
+ behavior inherited from <productname>PostgreSQL</>, but autocommit-off is closer to the SQL spec. If you
+<!## end>
prefer autocommit-off, you might wish to set it in the system-wide
<filename>psqlrc</filename> file or your
<filename>~/.psqlrc</filename> file.
@@ -2649,6 +2686,9 @@ bar
<!## XC>
<productname>Postgres-XC</productname> internals and provide
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> internals and provide
+<!## end>
similar functionality in your own programs. (To select this behavior
on program start-up, use the switch <option>-E</option>.) If you set
the variable to the value <literal>noexec</literal>, the queries are
@@ -3007,6 +3047,9 @@ testdb=&gt; <userinput>INSERT INTO my_table VALUES (:'content');</userinput>
<!## XC>
<productname>Postgres-XC</productname> extensions, hence the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions, hence the
+<!## end>
conflict. The colon syntax for escaping a variable's value as an
SQL literal or identifier is a <application>psql</application>
extension.)
@@ -3323,6 +3366,9 @@ $endif
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
@@ -3362,6 +3408,9 @@ $endif
<!## XC>
by appending a dash and the <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ by appending a dash and the <productname>Postgres-XL</productname>
+<!## end>
release number, for example <filename>~/.psqlrc-&version;</filename>.
A matching version-specific file will be read in preference to a
non-version-specific file.
diff --git a/doc-xc/src/sgml/ref/reassign_owned.sgmlin b/doc-xc/src/sgml/ref/reassign_owned.sgmlin
index a0d8320a48..9ca53ebcc2 100644
--- a/doc-xc/src/sgml/ref/reassign_owned.sgmlin
+++ b/doc-xc/src/sgml/ref/reassign_owned.sgmlin
@@ -113,6 +113,9 @@ REASSIGN OWNED BY <replaceable class="PARAMETER">old_role</replaceable> [, ...]
<!## XC>
<productname>Postgres-XC</productname> extension inherited from <productname>PostgreSQL</productname>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension inherited from <productname>PostgreSQL</productname>.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/reindex.sgmlin b/doc-xc/src/sgml/ref/reindex.sgmlin
index 393ad1b55f..5b93691813 100644
--- a/doc-xc/src/sgml/ref/reindex.sgmlin
+++ b/doc-xc/src/sgml/ref/reindex.sgmlin
@@ -56,6 +56,9 @@ REINDEX { INDEX | TABLE | DATABASE | SYSTEM } <replaceable class="PARAMETER">nam
<!## XC>
<productname>Postgres-XC</productname> under certain uncommon access
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> under certain uncommon access
+<!## end>
patterns. <command>REINDEX</command> provides a way to reduce
the space consumption of the index by writing a new version of
the index without the dead pages. See <xref
@@ -185,6 +188,9 @@ REINDEX { INDEX | TABLE | DATABASE | SYSTEM } <replaceable class="PARAMETER">nam
<!## XC>
<productname>Postgres-XC</productname> servers
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> servers
+<!## end>
with the <option>-P</option> option included on its command line.
Then, <command>REINDEX DATABASE</>, <command>REINDEX SYSTEM</>,
<command>REINDEX TABLE</>, or <command>REINDEX INDEX</> can be
diff --git a/doc-xc/src/sgml/ref/reindexdb.sgmlin b/doc-xc/src/sgml/ref/reindexdb.sgmlin
index b49f1e045d..1b9a095d27 100644
--- a/doc-xc/src/sgml/ref/reindexdb.sgmlin
+++ b/doc-xc/src/sgml/ref/reindexdb.sgmlin
@@ -22,6 +22,12 @@ PostgreSQL documentation
<refpurpose>reindex a <productname>Postgres-XC</productname> database</refpurpose>
</refnamediv>
<!## end>
+<!## XL>
+ <refnamediv>
+ <refname id="reindexdb">reindexdb</refname>
+ <refpurpose>reindex a <productname>Postgres-XL</productname> database</refpurpose>
+ </refnamediv>
+<!## end>
<indexterm zone="app-reindexdb">
<primary>reindexdb</primary>
@@ -64,6 +70,9 @@ PostgreSQL documentation
<!## XC>
in a <productname>Postgres-XC</productname> database.
<!## end>
+<!## XL>
+ in a <productname>Postgres-XL</productname> database.
+<!## end>
</para>
<para>
@@ -291,6 +300,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
@@ -327,6 +339,9 @@ PostgreSQL documentation
<!## XC>
times to the <productname>Postgres-XC</productname> server, asking
<!## end>
+<!## XL>
+ times to the <productname>Postgres-XL</productname> server, asking
+<!## end>
for a password each time. It is convenient to have a
<filename>~/.pgpass</> file in such cases. See <xref
linkend="libpq-pgpass"> for more information.
diff --git a/doc-xc/src/sgml/ref/release_savepoint.sgmlin b/doc-xc/src/sgml/ref/release_savepoint.sgmlin
index 45ca57a630..119fda70d8 100644
--- a/doc-xc/src/sgml/ref/release_savepoint.sgmlin
+++ b/doc-xc/src/sgml/ref/release_savepoint.sgmlin
@@ -41,6 +41,14 @@ RELEASE [ SAVEPOINT ] <replaceable>savepoint_name</replaceable>
</para>
</refsect1>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>RELEASE SAVEPOINT</command> is not supported by the
+ current release of <productname>Postgres-XL</productname>.
+ </para>
+ </refsect1>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/ref/reset.sgmlin b/doc-xc/src/sgml/ref/reset.sgmlin
index be7b34e551..3bf6dfdcfd 100644
--- a/doc-xc/src/sgml/ref/reset.sgmlin
+++ b/doc-xc/src/sgml/ref/reset.sgmlin
@@ -107,6 +107,9 @@ RESET timezone;
<!## XC>
<command>RESET</command> is a <productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <command>RESET</command> is a <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/revoke.sgmlin b/doc-xc/src/sgml/ref/revoke.sgmlin
index a0279237e4..4b5acbf821 100644
--- a/doc-xc/src/sgml/ref/revoke.sgmlin
+++ b/doc-xc/src/sgml/ref/revoke.sgmlin
@@ -280,6 +280,9 @@ REVOKE admins FROM joe;
<!## XC>
is required according to the standard, but <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ is required according to the standard, but <productname>Postgres-XL</>
+<!## end>
assumes <literal>RESTRICT</literal> by default.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/rollback_prepared.sgmlin b/doc-xc/src/sgml/ref/rollback_prepared.sgmlin
index 97b0ecf50f..a744922887 100644
--- a/doc-xc/src/sgml/ref/rollback_prepared.sgmlin
+++ b/doc-xc/src/sgml/ref/rollback_prepared.sgmlin
@@ -87,6 +87,18 @@ ROLLBACK PREPARED <replaceable class="PARAMETER">transaction_id</replaceable>
If <literal>xc_maintenance_mode</literal> GUC parameter is set to <literal>ON</literal>, <command>ROLLBACK PREPARED</command> will not propagate to other nodes. It just runs locally and report the result to <literal>GTM</literal>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ If more than one Datanode and/or Coordinator are involved in the
+ transaction, the <command>ROLLBACK PREPARED</> command will propagate to
+ all the nodes involved.
+ </para>
+&xlonly;
+ <para>
+ If <literal>xc_maintenance_mode</literal> GUC parameter is set to <literal>ON</literal>, <command>ROLLBACK PREPARED</command> will not propagate to other nodes. It just runs locally and report the result to <literal>GTM</literal>.
+ </para>
+<!## end>
</refsect1>
<refsect1 id="sql-rollback-prepared-examples">
@@ -111,6 +123,9 @@ ROLLBACK PREPARED 'foobar';
<!## XC>
<member><xref linkend="guc-xc-maintenance-mode"></member>
<!## end>
+<!## XL>
+ <member><xref linkend="guc-xc-maintenance-mode"></member>
+<!## end>
</simplelist>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/rollback_to.sgmlin b/doc-xc/src/sgml/ref/rollback_to.sgmlin
index d47afab82c..6ee1972860 100644
--- a/doc-xc/src/sgml/ref/rollback_to.sgmlin
+++ b/doc-xc/src/sgml/ref/rollback_to.sgmlin
@@ -41,6 +41,14 @@ ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] <replaceable>savepoint_name</re
future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>ROLLBACK TO</> is not yet supported
+ in <productname>Postgres-XL</>. This may be supported in the
+ future releases.
+ </para>
+<!## end>
<!## PG>
<para>
Roll back all commands that were executed after the savepoint was
diff --git a/doc-xc/src/sgml/ref/savepoint.sgmlin b/doc-xc/src/sgml/ref/savepoint.sgmlin
index 20f2452216..db759a28d2 100644
--- a/doc-xc/src/sgml/ref/savepoint.sgmlin
+++ b/doc-xc/src/sgml/ref/savepoint.sgmlin
@@ -36,8 +36,16 @@ SAVEPOINT <replaceable>savepoint_name</replaceable>
<!## XC>
&xconly;
<para>
+ <command>SAVEPOINT</> is not yet supported
+ by <productname>Postgres-XC</>. This command may be supported
+ in the future releases.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
<command>SAVEPOINT</> has not been supported
- by <productname>Postgres-XC</> yet. This command may be supported
+ by <productname>Postgres-XL</> yet. This command may be supported
in the future releases.
</para>
<!## end>
diff --git a/doc-xc/src/sgml/ref/select_into.sgmlin b/doc-xc/src/sgml/ref/select_into.sgmlin
index fc72997b81..6b1d8eb62e 100644
--- a/doc-xc/src/sgml/ref/select_into.sgmlin
+++ b/doc-xc/src/sgml/ref/select_into.sgmlin
@@ -125,6 +125,16 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="parameter">expression</replac
distribution is done by <literal>ROUNDROBIN</literal>.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In Postgres-XL, the <command>SELECT INTO</command> distributes data
+ of the newly-created table on all the nodes respecting the default
+ distribution which is <literal>HASH</literal> on the first column
+ having a type that can be distributed. If no columns are found,
+ distribution is done by <literal>ROUNDROBIN</literal>.
+ </para>
+<!## end>
</refsect1>
<refsect1>
diff --git a/doc-xc/src/sgml/ref/set.sgmlin b/doc-xc/src/sgml/ref/set.sgmlin
index 1a13135593..0469eb12ce 100644
--- a/doc-xc/src/sgml/ref/set.sgmlin
+++ b/doc-xc/src/sgml/ref/set.sgmlin
@@ -320,6 +320,9 @@ SET TIME ZONE 'Europe/Rome';
<!## XC>
<productname>Postgres-XC</productname> allows more flexible
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows more flexible
+<!## end>
time-zone specifications. All other <literal>SET</literal>
<!## PG>
features are <productname>PostgreSQL</productname> extensions.
@@ -327,6 +330,9 @@ SET TIME ZONE 'Europe/Rome';
<!## XC>
features are <productname>Postgres-XC</productname> extensions.
<!## end>
+<!## XL>
+ features are <productname>Postgres-XL</productname> extensions.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/show.sgmlin b/doc-xc/src/sgml/ref/show.sgmlin
index c82bd4370d..5ddc76db57 100644
--- a/doc-xc/src/sgml/ref/show.sgmlin
+++ b/doc-xc/src/sgml/ref/show.sgmlin
@@ -146,6 +146,13 @@ SHOW ALL
restriction may be solved in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> only shows local settings. This
+ restriction may be changed in the future releases.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -202,6 +209,9 @@ SHOW ALL;
<!## XC>
<productname>Postgres-XC</productname> extension.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extension.
+<!## end>
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/ref/start_transaction.sgmlin b/doc-xc/src/sgml/ref/start_transaction.sgmlin
index 6de3b4a88f..8262f40784 100644
--- a/doc-xc/src/sgml/ref/start_transaction.sgmlin
+++ b/doc-xc/src/sgml/ref/start_transaction.sgmlin
@@ -65,6 +65,9 @@ START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable
<!## XC>
<productname>Postgres-XC</productname>'s behavior can be seen as implicitly
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>'s behavior can be seen as implicitly
+<!## end>
issuing a <command>COMMIT</command> after each command that does not
follow <command>START TRANSACTION</> (or <command>BEGIN</command>),
and it is therefore often called <quote>autocommit</>.
@@ -87,6 +90,9 @@ START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable
<!## XC>
reasons <productname>Postgres-XC</productname> allows the commas to be
<!## end>
+<!## XL>
+ reasons <productname>Postgres-XL</productname> allows the commas to be
+<!## end>
omitted.
</para>
diff --git a/doc-xc/src/sgml/ref/truncate.sgmlin b/doc-xc/src/sgml/ref/truncate.sgmlin
index e6e12c2adf..526b849df3 100644
--- a/doc-xc/src/sgml/ref/truncate.sgmlin
+++ b/doc-xc/src/sgml/ref/truncate.sgmlin
@@ -62,7 +62,11 @@ TRUNCATE [ TABLE ] [ ONLY ] <replaceable class="PARAMETER">name</replaceable> [,
<listitem>
<para>
Automatically restart sequences owned by columns of
- the truncated table(s).
+ the truncated table(s).
+<!## XL>
+This feature is not implemented in
+ Postgres-XL currently.
+<!## end>
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/ref/unlisten.sgmlin b/doc-xc/src/sgml/ref/unlisten.sgmlin
index 96b10336ad..d2a6c95324 100644
--- a/doc-xc/src/sgml/ref/unlisten.sgmlin
+++ b/doc-xc/src/sgml/ref/unlisten.sgmlin
@@ -35,6 +35,13 @@ UNLISTEN { <replaceable class="PARAMETER">channel</replaceable> | * }
in <productname>Postgres-XC</> yet.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <command>UNLISTEN</> statement is not yet supported
+ in <productname>Postgres-XL</>.
+ </para>
+<!## end>
<!## PG>
diff --git a/doc-xc/src/sgml/ref/unpause_cluster.sgmlin b/doc-xc/src/sgml/ref/unpause_cluster.sgmlin
new file mode 100644
index 0000000000..d138370107
--- /dev/null
+++ b/doc-xc/src/sgml/ref/unpause_cluster.sgmlin
@@ -0,0 +1,55 @@
+<!--
+doc/src/sgml/ref/unpause_cluster.sgml
+PostgreSQL documentation
+-->
+<!## XL>
+<refentry id="SQL-UNPAUSECLUSTER">
+ <refmeta>
+ <refentrytitle>UNPAUSE CLUSTER</refentrytitle>
+ <manvolnum>7</manvolnum>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>UNPAUSE CLUSTER</refname>
+ <refpurpose>unpause the <productname>Postgres-XL</productname> cluster</refpurpose>
+ </refnamediv>
+
+ <indexterm zone="sql-pausecluster">
+ <primary>UNPAUSE CLUSTER</primary>
+ </indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+UNPAUSE CLUSTER
+
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+&xlonly;
+
+ <para>
+ <command>UNPAUSE CLUSTER </command> is a SQL command specific
+ to <productname>Postgres-XL</productname> that unpauses
+ cluster operation.
+ </para>
+
+ <para>
+ If the DBA previously paused the cluster via the command <xref linkend="sql-pausecluster">, the DBA can resume operation vi <command>UNPAUSE CLUSTER</command>.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Compatibility</title>
+ <para>
+ <command>UNPAUSE CLUSTER</command> does not conform to the <acronym>
+ SQL</acronym> standards, it is a Postgres-XL specific command.
+ </para>
+ </refsect1>
+
+</refentry>
+<!## end>
+
diff --git a/doc-xc/src/sgml/ref/update.sgmlin b/doc-xc/src/sgml/ref/update.sgmlin
index ee17e64968..0a05ede893 100644
--- a/doc-xc/src/sgml/ref/update.sgmlin
+++ b/doc-xc/src/sgml/ref/update.sgmlin
@@ -40,6 +40,15 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ] <rep
[ RETURNING * | <replaceable class="parameter">output_expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] [, ...] ]
</synopsis>
<!## end>
+<!## XL>
+<synopsis>
+UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ] <replaceable class="parameter">alias</replaceable> ]
+ SET { <replaceable class="PARAMETER">column</replaceable> = { <replaceable class="PARAMETER">expression</replaceable> | DEFAULT } |
+ ( <replaceable class="PARAMETER">column</replaceable> [, ...] ) = ( { <replaceable class="PARAMETER">expression</replaceable> | DEFAULT } [, ...] ) } [, ...]
+ [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]
+ [ RETURNING * | <replaceable class="parameter">output_expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] [, ...] ]
+</synopsis>
+<!## end>
</refsynopsisdiv>
<refsect1>
@@ -210,6 +219,14 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ] <rep
</para>
</footnote>
<!## end>
+<!## XL>
+ <footnote>
+ <para>
+ <literal>WHERE CURRENT OF</literal> clause is not supported by
+ the current release of <productname>Postgres-XL</productname>.
+ </para>
+ </footnote>
+<!## end>
</para>
</listitem>
</varlistentry>
@@ -231,6 +248,12 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ [ AS ] <rep
column names of the <replaceable class="PARAMETER">table</replaceable>.
Write <literal>*</> to return all columns.
<!## end>
+<!## XL>
+ An expression to be computed and returned by the <command>UPDATE</>
+ command after each row is updated. The expression can use any
+ column names of the <replaceable class="PARAMETER">table</replaceable>.
+ Write <literal>*</> to return all columns.
+<!## end>
</para>
</listitem>
</varlistentry>
diff --git a/doc-xc/src/sgml/ref/vacuum.sgmlin b/doc-xc/src/sgml/ref/vacuum.sgmlin
index 74f6996ab3..6414e0eae0 100644
--- a/doc-xc/src/sgml/ref/vacuum.sgmlin
+++ b/doc-xc/src/sgml/ref/vacuum.sgmlin
@@ -40,6 +40,9 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
<!## XC>
In normal <productname>Postgres-XC</productname> operation, tuples that
<!## end>
+<!## XL>
+ In normal <productname>Postgres-XL</productname> operation, tuples that
+<!## end>
are deleted or obsoleted by an update are not physically removed from
their table; they remain present until a <command>VACUUM</command> is
done. Therefore it's necessary to do <command>VACUUM</command>
@@ -89,6 +92,13 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
on all the Datanodes as well.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, <command>VACUUM</> will be performed
+ on all the Datanodes as well.
+ </para>
+<!## end>
</refsect1>
<refsect1>
@@ -211,6 +221,9 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
<!## XC>
<productname>Postgres-XC</productname> query planner to make better
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> query planner to make better
+<!## end>
choices in planning queries.
</para>
@@ -237,6 +250,9 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
<!## XC>
<productname>Postgres-XC</productname> includes an <quote>autovacuum</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> includes an <quote>autovacuum</>
+<!## end>
facility which can automate routine vacuum maintenance. For more
information about automatic and manual vacuuming, see
<xref linkend="routine-vacuuming">.
diff --git a/doc-xc/src/sgml/ref/vacuumdb.sgmlin b/doc-xc/src/sgml/ref/vacuumdb.sgmlin
index 25e620ffa3..30c1fd5937 100644
--- a/doc-xc/src/sgml/ref/vacuumdb.sgmlin
+++ b/doc-xc/src/sgml/ref/vacuumdb.sgmlin
@@ -63,6 +63,11 @@ PostgreSQL documentation
<application>vacuumdb</application> will also generate internal statistics
used by the <productname>Postgres-XC</productname> query optimizer.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> database.
+ <application>vacuumdb</application> will also generate internal statistics
+ used by the <productname>Postgres-XL</productname> query optimizer.
+<!## end>
</para>
<para>
@@ -80,6 +85,13 @@ PostgreSQL documentation
performed in all the Datanodes as well.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</>, <command>VACUUM</> will be
+ performed in all the Datanodes as well.
+ </para>
+<!## end>
</refsect1>
@@ -331,6 +343,9 @@ PostgreSQL documentation
<!## XC>
This utility, like most other <productname>Postgres-XC</> utilities,
<!## end>
+<!## XL>
+ This utility, like most other <productname>Postgres-XL</> utilities,
+<!## end>
also uses the environment variables supported by <application>libpq</>
(see <xref linkend="libpq-envars">).
</para>
@@ -365,6 +380,9 @@ PostgreSQL documentation
<!## XC>
times to the <productname>Postgres-XC</productname> server, asking
<!## end>
+<!## XL>
+ times to the <productname>Postgres-XL</productname> server, asking
+<!## end>
for a password each time. It is convenient to have a
<filename>~/.pgpass</> file in such cases. See <xref
linkend="libpq-pgpass"> for more information.
diff --git a/doc-xc/src/sgml/ref/values.sgmlin b/doc-xc/src/sgml/ref/values.sgmlin
index f61e541f2c..45bd5e2c5b 100644
--- a/doc-xc/src/sgml/ref/values.sgmlin
+++ b/doc-xc/src/sgml/ref/values.sgmlin
@@ -208,6 +208,9 @@ UPDATE employees SET salary = salary * v.increase
<!## XC>
<literal>column2</>, etc in <productname>Postgres-XC</productname>, but
<!## end>
+<!## XL>
+ <literal>column2</>, etc in <productname>Postgres-XL</productname>, but
+<!## end>
these names might be different in other database systems.)
</para>
@@ -246,6 +249,9 @@ WHERE ip_address IN (VALUES('192.168.0.1'::inet), ('192.168.0.10'), ('192.168.1.
<!## XC>
<productname>Postgres-XC</productname> extensions; see also
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> extensions; see also
+<!## end>
under <xref linkend="sql-select">.
</para>
</refsect1>
diff --git a/doc-xc/src/sgml/reference.sgmlin b/doc-xc/src/sgml/reference.sgmlin
index 957a20538a..535bb65b76 100644
--- a/doc-xc/src/sgml/reference.sgmlin
+++ b/doc-xc/src/sgml/reference.sgmlin
@@ -17,6 +17,9 @@
<!## XC>
<productname>Postgres-XC</productname>, in narrative, tutorial, or
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, in narrative, tutorial, or
+<!## end>
example form, can be found in other parts of this book. See the
cross-references listed on each reference page.
</para>
@@ -40,6 +43,9 @@
<!## XC>
<productname>Postgres-XC</productname>. By <quote>SQL</quote> the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. By <quote>SQL</quote> the
+<!## end>
language in general is meant; information about the standards
conformance and compatibility of each command can be found on the
respective reference page.
@@ -64,6 +70,9 @@
<!## XC>
&alterNode;
<!## end>
+<!## XL>
+ &alterNode;
+<!## end>
&alterOperator;
&alterOperatorClass;
&alterOperatorFamily;
@@ -88,6 +97,9 @@
<!## XC>
&cleanConnection;
<!## end>
+<!## XL>
+ &cleanConnection;
+<!## end>
&close;
&cluster;
&commentOn;
@@ -98,6 +110,9 @@
<!## XC>
&createBarrier;
<!## end>
+<!## XL>
+ &createBarrier;
+<!## end>
&createCast;
&createCollation;
&createConversion;
@@ -114,6 +129,10 @@
&createNode;
&createNodeGroup;
<!## end>
+<!## XL>
+ &createNode;
+ &createNodeGroup;
+<!## end>
&createOperator;
&createOperatorClass;
&createOperatorFamily;
@@ -156,6 +175,10 @@
&dropNode;
&dropNodeGroup;
<!## end>
+<!## XL>
+ &dropNode;
+ &dropNodeGroup;
+<!## end>
&dropOperator;
&dropOperatorClass;
&dropOperatorFamily;
@@ -181,6 +204,9 @@
<!## XC>
&executeDirect;
<!## end>
+<!## XL>
+ &executeDirect;
+<!## end>
&explain;
&fetch;
&grant;
@@ -190,6 +216,9 @@
&lock;
&move;
&notify;
+<!## XL>
+ &pauseCluster;
+<!## end>
&prepare;
&prepareTransaction;
&reassignOwned;
@@ -213,6 +242,9 @@
&startTransaction;
&truncate;
&unlisten;
+<!## XL>
+ &unpauseCluster;
+<!## end>
&update;
&vacuum;
&values;
@@ -226,6 +258,9 @@
<!## XC>
<title>Postgres-XC Client Applications</title>
<!## end>
+<!## XL>
+ <title>Postgres-XL Client Applications</title>
+<!## end>
<partintro>
<para>
@@ -236,6 +271,9 @@
<!## XC>
<productname>Postgres-XC</productname> client applications and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> client applications and
+<!## end>
utilities. Not all of these commands are of general utility; some
might require special privileges. The common feature of these
applications is that they can be run on any host, independent of
@@ -269,6 +307,9 @@
<!## XC>
<title>Postgres-XC Server Applications</title>
<!## end>
+<!## XL>
+ <title>Postgres-XL Server Applications</title>
+<!## end>
<partintro>
<para>
@@ -279,6 +320,9 @@
<!## XC>
<productname>Postgres-XC</productname> server applications and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server applications and
+<!## end>
support utilities. These commands can only be run usefully on the
host where the database server resides. Other utility programs
are listed in <xref linkend="reference-client">.
@@ -290,10 +334,18 @@
&gtmPxy;
&gtmCtl;
<!## end>
+<!## XL>
+ &gtm;
+ &gtmPxy;
+ &gtmCtl;
+<!## end>
&initdb;
<!## XC>
&initgtm;
<!## end>
+<!## XL>
+ &initgtm;
+<!## end>
&pgControldata;
&pgCtl;
&pgResetxlog;
diff --git a/doc-xc/src/sgml/regress.sgmlin b/doc-xc/src/sgml/regress.sgmlin
index 153f5e5f46..4c5964c66a 100644
--- a/doc-xc/src/sgml/regress.sgmlin
+++ b/doc-xc/src/sgml/regress.sgmlin
@@ -19,6 +19,15 @@
users.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current version of <productname>Postgres-XL</productname> doesn't
+ support the regression test to run after building but before
+ installation. You can use each test manually but it is left to
+ users.
+ </para>
+<!## end>
<!## PG>
<para>
@@ -41,6 +50,15 @@
users.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current version of <productname>Postgres-XL</productname> doesn't
+ support the regression test to run after building but before
+ installation. You can use each test manually but it is left to
+ users.
+ </para>
+<!## end>
<!## PG>
<para>
The regression tests can be run against an already installed and
@@ -293,6 +311,15 @@ gmake check EXTRA_TESTS=collate.linux.utf8 LANG=en_US.utf8
users.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current version of <productname>Postgres-XL</productname> doesn't
+ support the regression test to run after building but before
+ installation. You can use each test manually but it is left to
+ users.
+ </para>
+<!## end>
<!## PG>
<para>
@@ -517,6 +544,15 @@ diff results/random.out expected/random.out
users.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current version of <productname>Postgres-XL</productname> doesn't
+ support the regression test to run after building but before
+ installation. You can use each test manually but it is left to
+ users.
+ </para>
+<!## end>
<!## PG>
<para>
@@ -623,6 +659,15 @@ float8:out:i.86-.*-openbsd=float8-small-is-zero.out
users.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Current version of <productname>Postgres-XL</productname> doesn't
+ support the regression test to run after building but before
+ installation. You can use each test manually but it is left to
+ users.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/release-xc-1.0.sgmlin b/doc-xc/src/sgml/release-xc-1.0.sgmlin
index b8d75b0d95..1379929916 100644
--- a/doc-xc/src/sgml/release-xc-1.0.sgmlin
+++ b/doc-xc/src/sgml/release-xc-1.0.sgmlin
@@ -1,294 +1,6 @@
<!-- doc/src/sgml/release-xc-1.0.sgml -->
<!-- See header comment in release.sgml about typical markup -->
- <sect1 id="release-xc-1-0-2">
- <title>Release 1.0.2</title>
-
- <note>
- <title>Release Date</title>
- <simpara>2013-02-05</simpara>
- </note>
-
- <para>
- This release contains a variety of fixes from 1.0.1.
- For information about new features in the 1.0 major release, see
- <xref linkend="release-xc-1-0">.
- </para>
-
- <sect2>
- <title>Migration to Version 1.0.2</title>
-
- <para>
- A dump/restore is not required for those running 1.0.X.
- </para>
-
- </sect2>
-
- <sect2>
- <title>Changes</title>
-
- <itemizedlist>
-
- <listitem>
- <para>
- Fix for bug 3602944: Fixed <command>gtm_ctl</command> to solve
- the PATH dependency. (Nikhil Sontakke)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3601255: Fixed the planner to disable FQS for all
- the <literal>OUTER</literal> joins.
- (Ashutosh Bapat)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3600220: Fixed coordinator/datanode to unregister
- themselves from GTM while restarting after
- "<literal>-m immediate</literal>" shutdown.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>gtm_ctl</command> for "<literal>status</literal>"
- command with "<literal>-Z gtm</literal>" to show the status correctly.
- (Koichi Suzuki)
- </para>
-
- <para>
- Now for <literal>-Z gtm</literal> option,
- <literal>gtm_ctl status</literal> displays if it runs as
- <literal>master</literal> or <literal>slave</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Rebased from PostgreSQL 9.1.6 to 9.1.7, and fixed several regression
- test failures, which had been newly introduced during the rebase.
- (Satoshi Nagayasu)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3597414: Fixed the planner for JOIN between two distributed
- tables to be pushable when on only one node.
- (Ashutosh Bapat)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3598637: Fixed GTM standby to avoid occasional crash.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed GTM to deal with a promoted master correctly while restarting.
- (Nikhil Sontakke, Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3583921: Fixed coordinator slave (and possibly datanode too)
- to avoid crash due to "<literal>too many KnownAssignedXids</literal>".
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3598030: Fixed to allow commit/abort transactions while
- connecting to the datanode directly.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3591285: Fixed autovacuum crash in datanode.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3571154: Fixed GTM proxy error while reconnecting.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <literal>libgtmclient.a</literal> to surpress debug messages.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed GTM proxy to have appropriate default values (retry count and
- retry interval) for GTM proxy HA.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fix for bug 3588869: Fixed GTM proxy to avoid stall while reconnecting.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed to enforce autocommit when running <command>ALTER DATABASE SET
- TABLESPACE</command>.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>pgxc_clean</command> for <literal>-s</literal>,
- <literal>--status</literal> option working correctly.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed "<command>SET XC_MAINTENANCE_MODE = ON</command>" to ignore
- "<literal>template0</literal>" database.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed GTM and GTM proxy for inaccurate default values of the port number.
- (Koichi Suzuki)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Added GTM header files in installation to allow compiling server modules.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Added support to create cached plans for XC-specific DDL commands.
- (Michael Paquier)
- </para>
-
- <para>
- This allows to use cached plans or prepared queries for following
- commands: <command>CREATE NODE</command>, <command>ALTER NODE</command>,
- <command>DROP NODE</command>, <command>CREATE NODE GROUP</command>,
- <command>DROP NODE GROUP</command>, <command>CLEAN CONNECTION</command>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>CREATE NODE GROUP</command>/<command>DROP NODE
- GROUP</command> commands to stop query pushdown to remote nodes.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed memory allocation issues pointed by ElectricFence (libefence).
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed memory corruption in GTM/backend buffer for snapshots and
- transaction IDs.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>COPY</command> command to deal with quoted column names.
- (Nikhil Sontakke, Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed to ignore automatically generated regression outputs specific
- to Postgres-XC.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>COPY</command> command to avoid crash when involving
- relation with no locator data.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>ALTER NODE</command> to allow modifying primary node data.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed compilation error in <command>pg_dump</command>.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Changed current value management of sequences to make it consistent
- with vanilla.
- (Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed <command>pg_dump</command> to get consistent sequence dump value.
- (Nikkhil Sontakke, Michael Paquier)
- </para>
- </listitem>
-
- <listitem>
- <para>
- Fixed and improved docs for several XC-specific commands, options and
- parameters.
- (Koichi Suzuki, Michael Paquier)
- </para>
- </listitem>
-
- </itemizedlist>
-
- </sect2>
-
- </sect1>
-
<sect1 id="release-xc-1-0-1">
<title>Release 1.0.1</title>
diff --git a/doc-xc/src/sgml/release-xl-9.2.sgmlin b/doc-xc/src/sgml/release-xl-9.2.sgmlin
new file mode 100644
index 0000000000..959b01da94
--- /dev/null
+++ b/doc-xc/src/sgml/release-xl-9.2.sgmlin
@@ -0,0 +1,527 @@
+<!-- doc/src/sgml/release-xl-9.2.sgml -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-xl-9-2">
+ <title>Release 9.2rc</title>
+
+ <note>
+ <title>Release Date</title>
+ <simpara>2014-05-13</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ <productname>Postgres-XL</> 9.2 is a symetric multi-headed, read and write-scalable
+ shared-nothing massively parallel processing cluster based on PostgreSQL. This release version is based on
+ PostgreSQL 9.2.4.
+ </para>
+
+ <para>
+ Currently the only architectures supported are 64 bit Linux operating systems.
+ </para>
+
+ <para>
+ This release of <productname>Postgres-XL</> is the first major release and
+ contains the following features, characteristics and enhancements:
+ </para>
+
+ <itemizedlist>
+ <!-- This list is a summary of each item detailed below, without authors -->
+ <listitem>
+ <para>
+ Support and extensions for existing features of PostgreSQL in a cluster-wide environment.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ SQL extensions and functionalities for management
+ and operations related to a cluster, which add a node-level granularity for
+ cluster operations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Creation of Global Transaction Manager (GTM), which is a centralized component
+ providing cluster-wide Multi-version Concurrency Control (MVCC).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Creation of mechanisms for <productname>Postgres-XL</> and enhancements of existing
+ internal mechanisms of <productname>PostgreSQL</>, which are related to connection pooling,
+ global transaction management, query planning, rewriting, analyzing and execution.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restrictions related to existing features in <productname>PostgreSQL</> and currently not supported by
+ <productname>Postgres-XL</>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The above items are explained in more detail in the sections below.
+ </para>
+
+
+ <para>
+ Postgres-XL builds off another project called Postgres-XC.
+ The original overall architecture and design of <productname>Postgres-XC</> is by Koichi Suzuki, Mason Sharp,
+ Pavan Deolasee, Andrei Martsinchyk and Michael Paquier. Koichi Suzuki is the original project lead. More recent long time contributors include Ashutosh Bapat, Abbas Butt, and Amit Khandekar.
+ </para>
+ <para>
+ Postgres-XL modifies the architecture to more tightly bond the components together and add massively parallel processing with direct Datanode to Datanode communication for fast performance. In addition, a plan is determined one time, serialized and sent down to the Datanodes instead of sending down SQL statements and reparsing. Also, there have been some changes made to support multi-tenancy, locking down access to pg_catalog tables and providing better pooler management. The key architects and developers are Andrei Martsinchyk, Mason Sharp, Nikhil Sontakke, and Jim Mlodgenski, with Mason Sharp the project lead.
+ </para>
+
+ </sect2>
+
+ <sect2>
+
+ <title>Details</title>
+
+ <sect3>
+ <title>Existing standard features supported and related extensions</title>
+
+ <para>
+ This is an exhaustive list of all the features included in <productname>PostgreSQL</>
+ and currently supported in <productname>Postgres-XL</>.
+ </para>
+ <!-- complete list of existing features of Postgres supported -->
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ A list of all the CREATE/ALTER/DROP SQL commands supported appears below.
+ All of the features listed
+ here work like native PostgreSQL. Extensions may have been added to make them usable
+ in a cluster environment.
+ </para>
+ <para>
+ <link linkend="SQL-CREATEUSER"><command>CREATE USER</></link>,
+ <link linkend="SQL-ALTERUSER"><command>ALTER USER</></link>,
+ <link linkend="SQL-DROPUSER"><command>DROP USER</></link>,
+ <link linkend="SQL-CREATEAGGREGATE"><command>CREATE AGGREGATE</></link>,
+ <link linkend="SQL-ALTERAGGREGATE"><command>ALTER AGGREGATE</></link>,
+ <link linkend="SQL-DROPAGGREGATE"><command>DROP AGGREGATE</></link>,
+ <link linkend="SQL-CREATECOLLATION"><command>CREATE COLLATION</></link>,
+ <link linkend="SQL-ALTERCOLLATION"><command>ALTER COLLATION</></link>,
+ <link linkend="SQL-DROPCOLLATION"><command>DROP COLLATION</></link>,
+ <link linkend="SQL-CREATECONVERSION"><command>CREATE CONVERSION</></link>,
+ <link linkend="SQL-ALTERCONVERSION"><command>ALTER CONVERSION</></link>,
+ <link linkend="SQL-DROPCONVERSION"><command>DROP CONVERSION</></link>,
+ <link linkend="SQL-CREATEDATABASE"><command>CREATE DATABASE</></link>,
+ <link linkend="SQL-ALTERDATABASE"><command>ALTER DATABASE</></link>,
+ <link linkend="SQL-DROPDATABASE"><command>DROP DATABASE</></link>,
+ <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT PRIVILEGES</></link>,
+ <link linkend="SQL-CREATEDOMAIN"><command>CREATE DOMAIN</></link>,
+ <link linkend="SQL-ALTERDOMAIN"><command>ALTER DOMAIN</></link>,
+ <link linkend="SQL-DROPDOMAIN"><command>DROP DOMAIN</></link>,
+ <link linkend="SQL-CREATEFUNCTION"><command>CREATE FUNCTION</></link>,
+ <link linkend="SQL-ALTERFUNCTION"><command>ALTER FUNCTION</></link>,
+ <link linkend="SQL-DROPFUNCTION"><command>DROP FUNCTION</></link>,
+ <link linkend="SQL-CREATEGROUP"><command>CREATE GROUP</></link>,
+ <link linkend="SQL-ALTERGROUP"><command>ALTER GROUP</></link>,
+ <link linkend="SQL-DROPGROUP"><command>DROP GROUP</></link>,
+ <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link>,
+ <link linkend="SQL-ALTERINDEX"><command>ALTER INDEX</></link>,
+ <link linkend="SQL-DROPINDEX"><command>DROP INDEX</></link>,
+ <link linkend="SQL-CREATELANGUAGE"><command>CREATE LANGUAGE</></link>,
+ <link linkend="SQL-ALTERLANGUAGE"><command>ALTER LANGUAGE</></link>,
+ <link linkend="SQL-DROPLANGUAGE"><command>DROP LANGUAGE</></link>,
+ <link linkend="SQL-CREATEOPCLASS"><command>CREATE OPERATOR CLASS</></link>,
+ <link linkend="SQL-ALTEROPCLASS"><command>ALTER OPERATOR CLASS</></link>,
+ <link linkend="SQL-DROPOPCLASS"><command>DROP OPERATOR CLASS</></link>,
+ <link linkend="SQL-CREATEOPFAMILY"><command>CREATE OPERATOR FAMILY</></link>,
+ <link linkend="SQL-ALTEROPFAMILY"><command>ALTER OPERATOR FAMILY</></link>,
+ <link linkend="SQL-DROPOPFAMILY"><command>DROP OPERATOR FAMILY</></link>,
+ <link linkend="SQL-CREATEROLE"><command>CREATE ROLE</></link>,
+ <link linkend="SQL-ALTERROLE"><command>ALTER ROLE</></link>,
+ <link linkend="SQL-DROPROLE"><command>DROP ROLE</></link>,
+ <link linkend="SQL-CREATESCHEMA"><command>CREATE SCHEMA</></link>,
+ <link linkend="SQL-ALTERSCHEMA"><command>ALTER SCHEMA</></link>,
+ <link linkend="SQL-DROPSCHEMA"><command>DROP SCHEMA</></link>,
+ <link linkend="SQL-CREATESEQUENCE"><command>CREATE SEQUENCE</></link>,
+ <link linkend="SQL-ALTERSEQUENCE"><command>ALTER SEQUENCE</></link>,
+ <link linkend="SQL-DROPSEQUENCE"><command>DROP SEQUENCE</></link>,
+ <link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link>,
+ <link linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>,
+ <link linkend="SQL-DROPTABLE"><command>DROP TABLE</></link>,
+ <link linkend="SQL-CREATETABLESPACE"><command>CREATE TABLESPACE</></link>,
+ <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE</></link>,
+ <link linkend="SQL-DROPTABLESPACE"><command>DROP TABLESPACE</></link>,
+ <link linkend="SQL-CREATETSCONFIG"><command>CREATE TEXT SEARCH CONFIGURATION</></link>,
+ <link linkend="SQL-ALTERTSCONFIG"><command>ALTER TEXT SEARCH CONFIGURATION</></link>,
+ <link linkend="SQL-DROPTSCONFIG"><command>DROP TEXT SEARCH CONFIGURATION</></link>,
+ <link linkend="SQL-CREATETSDICTIONARY"><command>CREATE TEXT SEARCH DICTIONARY</></link>,
+ <link linkend="SQL-ALTERTSDICTIONARY"><command>ALTER TEXT SEARCH DICTIONARY</></link>,
+ <link linkend="SQL-DROPTSDICTIONARY"><command>DROP TEXT SEARCH DICTIONARY</></link>,
+ <link linkend="SQL-CREATETSPARSER"><command>CREATE TEXT SEARCH PARSER</></link>,
+ <link linkend="SQL-ALTERTSPARSER"><command>ALTER TEXT SEARCH PARSER</></link>,
+ <link linkend="SQL-DROPTSPARSER"><command>DROP TEXT SEARCH PARSER</></link>,
+ <link linkend="SQL-CREATETSTEMPLATE"><command>CREATE TEXT SEARCH TEMPLATE</></link>,
+ <link linkend="SQL-ALTERTSTEMPLATE"><command>ALTER TEXT SEARCH TEMPLATE</></link>,
+ <link linkend="SQL-DROPTSTEMPLATE"><command>DROP TEXT SEARCH TEMPLATE</></link>,
+ <link linkend="SQL-CREATETYPE"><command>CREATE TYPE</></link>,
+ <link linkend="SQL-ALTERTYPE"><command>ALTER TYPE</></link>,
+ <link linkend="SQL-DROPTYPE"><command>DROP TYPE</></link>,
+ <link linkend="SQL-CREATEUSER"><command>CREATE USER</></link>,
+ <link linkend="SQL-ALTERUSER"><command>ALTER USER</></link>,
+ <link linkend="SQL-DROPUSER"><command>DROP USER</></link>,
+ <link linkend="SQL-CREATEVIEW"><command>CREATE VIEW</></link>,
+ <link linkend="SQL-ALTERVIEW"><command>ALTER VIEW</></link>,
+ <link linkend="SQL-DROPVIEW"><command>DROP VIEW</></link>,
+ <link linkend="SQL-CREATECAST"><command>CREATE CAST</></link>,
+ <link linkend="SQL-DROPCAST"><command>DROP CAST</></link>,
+ <link linkend="SQL-CREATERULE"><command>CREATE RULE</></link>,
+ <link linkend="SQL-DROPRULE"><command>DROP RULE</></link>,
+ <link linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>,
+ </para>
+ </listitem>
+ <listitem>
+ <para>List of other supported SQL</para>
+ <para>
+ <link linkend="SQL-ANALYZE"><command>ANALYZE</></link>,
+ <link linkend="SQL-BEGIN"><command>BEGIN</></link>,
+ <link linkend="SQL-CHECKPOINT"><command>CHECKPOINT</></link>,
+ <link linkend="SQL-CLOSE"><command>CLOSE</></link>,
+ <link linkend="SQL-CLUSTER"><command>CLUSTER</></link>,
+ <link linkend="SQL-COMMENT"><command>COMMENT</></link>,
+ <link linkend="SQL-COMMIT"><command>COMMIT</></link>,
+ <link linkend="SQL-COMMIT-PREPARED"><command>COMMIT PREPARED</></link>,
+ <link linkend="SQL-COPY"><command>COPY</></link>,
+ <link linkend="SQL-DEALLOCATE"><command>DEALLOCATE</></link>,
+ <link linkend="SQL-DECLARE"><command>DECLARE</></link>,
+ <link linkend="SQL-DELETE"><command>DELETE</></link>,
+ <link linkend="SQL-DISCARD"><command>DISCARD</></link>,
+ <link linkend="SQL-DO"><command>DO</></link>,
+ <link linkend="SQL-END"><command>END</></link>,
+ <link linkend="SQL-EXECUTE"><command>EXECUTE</></link>,
+ <link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link>,
+ <link linkend="SQL-FETCH"><command>FETCH</></link>,
+ <link linkend="SQL-GRANT"><command>GRANT</></link>,
+ <link linkend="SQL-INSERT"><command>INSERT</></link>,
+ <link linkend="SQL-LOAD"><command>LOAD</></link>,
+ <link linkend="SQL-LOCK"><command>LOCK</></link>,
+ <link linkend="SQL-MOVE"><command>MOVE</></link>,
+ <link linkend="SQL-PREPARE"><command>PREPARE</></link>,
+ <link linkend="SQL-PREPARE-TRANSACTION"><command>PREPARE TRANSACTION</></link>,
+ <link linkend="SQL-REASSIGN-OWNED"><command>REASSIGN OWNED</></link>,
+ <link linkend="SQL-REINDEX"><command>REINDEX</></link>,
+ <link linkend="SQL-RESET"><command>RESET</></link>,
+ <link linkend="SQL-REVOKE"><command>REVOKE</></link>,
+ <link linkend="SQL-ROLLBACK"><command>ROLLBACK</></link>,
+ <link linkend="SQL-ROLLBACK-PREPARED"><command>ROLLBACK PREPARED</></link>,
+ <link linkend="SQL-SELECT"><command>SELECT</></link>,
+ <link linkend="SQL-SELECTINTO"><command>SELECT INTO</></link>,
+ <link linkend="SQL-SET"><command>SET</></link>,
+ <link linkend="SQL-SET-CONSTRAINTS"><command>SET CONSTRAINTS</></link>,
+ <link linkend="SQL-SET-ROLE"><command>SET ROLE</></link>,
+ <link linkend="SQL-SET-SESSION-AUTHORIZATION"><command>SET SESSION AUTHORIZATION</></link>,
+ <link linkend="SQL-SHOW"><command>SHOW</></link>,
+ <link linkend="SQL-START-TRANSACTION"><command>START TRANSACTION</></link>,
+ <link linkend="SQL-TRUNCATE"><command>TRUNCATE</></link>,
+ <link linkend="SQL-UPDATE"><command>UPDATE</></link>,
+ <link linkend="SQL-VACUUM"><command>VACUUM</></link>,
+ <link linkend="SQL-VALUES"><command>VALUES</></link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ HOT-Standby and streaming replication work as in native <productname>PostgreSQL</>,
+ at the Coordinator and Datanode level.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New configuration parameters in <filename>postgresql.conf</>
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para><varname>pooler_port</></para>
+ <para>Port opened by pooler to which backends can connect to communicate with</para>
+ </listitem>
+ <listitem>
+ <para><varname>min_pool_size</></para>
+ <para>Minimum number of connections in pool</para>
+ </listitem>
+ <listitem>
+ <para><varname>max_pool_size</></para>
+ <para>Maximum number of connections in pool</para>
+ </listitem>
+ <listitem>
+ <para><varname>pool_maintenance_timeout</></para>
+ <para>When to clean up idle connections</para>
+ </listitem>
+ <listitem>
+ <para><varname>remote_query_cost</></para>
+ <para>Cost overhead for setting up a remote query</para>
+ </listitem>
+ <listitem>
+ <para><varname>network_byte_cost</></para>
+ <para>Data shipping cost for query planning</para>
+ </listitem>
+ <listitem>
+ <para><varname>sequence_range</></para>
+ <para>For frequent requests of sequences, get up to this range</para>
+ </listitem>
+ <listitem>
+ <para><varname>max_pool_size</></para>
+ <para>Maximum number of connections in pool</para>
+ </listitem>
+ <listitem>
+ <para><varname>max_pool_size</></para>
+ <para>Maximum number of connections in pool</para>
+ </listitem>
+ <listitem>
+ <para><varname>max_coordinators</></para>
+ <para>Maximum number of Coordinators that can be defined in local node</para>
+ </listitem>
+ <listitem>
+ <para><varname>max_datanodes</></para>
+ <para>Maximum number of Datanodes that can be defined in local node</para>
+ </listitem>
+ <listitem>
+ <para><varname>gtm_host</></para>
+ <para>Host to connect to GTM</para>
+ </listitem>
+ <listitem>
+ <para><varname>gtm_port</></para>
+ <para>Port to connect to GTM</para>
+ </listitem>
+ <listitem>
+ <para><varname>pgxc_node_name</></para>
+ <para>Name of the local node. This is currently set by initdb.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>SQL extensions for <productname>Postgres-XL</></title>
+
+ <para>
+ This section lists all the new SQL functionalities and system functions that
+ and can be used to manage a cluster environment.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <link linkend="SQL-CREATENODE"><command>CREATE NODE</></link>,
+ <link linkend="SQL-ALTERNODE"><command>ALTER NODE</></link>,
+ <link linkend="SQL-DROPNODE"><command>DROP NODE</></link>
+ </para>
+ <para>
+ These SQL commands are used to manage cluster node information in catalog
+ <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>.
+ </para>
+ <para>
+ These commands run only on the local node where they are run, and running them on Datanodes
+ make no sense as this catalog data is used only by Coordinator to identify remote nodes
+ and by connection pooling to get necessary remote connection information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-CREATENODEGROUP"><command>CREATE NODE GROUP</></link>,
+ <link linkend="SQL-DROPNODEGROUP"><command>DROP NODE GROUP</></link>
+ </para>
+ <para>
+ <command>CREATE NODE GROUP</> and <command>DROP NODE GROUP</> manage the node groups that
+ can be used when creating a table with the extension <command>TO GROUP</> of <command>CREATE TABLE</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-CREATEBARRIER"><command>CREATE BARRIER</></link>
+ </para>
+ <para>
+ When specified with an ID, this command allows to register in all of the nodes of the cluster
+ a common and consistent time point to be able to recover all the nodes consistently back to
+ this point. Internally, a barrier is written in the WAL file of all of the nodes.
+ </para>
+ <para>
+ <varname>recovery_target_barrier</varname> in <filename>recovery.conf</> can be used to recover
+ a node to a given barrier ID.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-CLEANCONNECTION"><command>CLEAN CONNECTION</></link>
+ </para>
+ <para>
+ <command>CLEAN CONNECTION</command> is a connection pooling utility able to drop connections on chosen node(s)
+ for a given database or/and user.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pgxc_pool_check()</>, <function>pgxc_pool_reload()</>
+ </para>
+ <para>
+ Those system functions can be used to check or update the data cached in pooler with
+ <link linkend="catalog-pgxc-node"><structname>pgxc_node</structname></link>. <function>pgxc_pool_check()</>
+ checks if the connection information is consistent between pooler cache and catalogs.
+ <function>pgxc_pool_reload()</> updates the connection information cached in pool.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-EXECUTEDIRECT"><command>EXECUTE DIRECT</></link>
+ </para>
+ <para>
+ <command>EXECUTE DIRECT</> can be used to launch a query directly to a given node. Only a single node
+ can be targetted at the same time.
+ </para>
+ <para>
+ <command>INSERT</command>, <command>UPDATE</command> and <command>DELETE</command> are not authorized.
+ </para>
+ <para>
+ Utilities are basically forbidden but some are authorized for cluster management purposes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-PAUSECLUSTER"><command>PAUSE CLUSTER</></link>
+ <link linkend="SQL-UNPAUSECLUSTER"><command>UNPAUSE CLUSTER</></link>
+ </para>
+ <para>
+ <command>PAUSE CLUSTER</> and <command>UNPAUSE CLUSTER</>
+ can be used to halt other cluster activity except for the session
+ that invoked it. Client sessions are not disconnected, they just
+ are paused until brief maintenance is done, like restarting
+ or moving a Datanode.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Restrictions</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>List of all the unsupported SQL commands</para>
+ <para>
+ <link linkend="SQL-CREATEEXTENSION"><command>CREATE EXTENSION</></link>,
+ <link linkend="SQL-ALTEREXTENSION"><command>ALTER EXTENSION</></link>,
+ <link linkend="SQL-DROPEXTENSION"><command>DROP EXTENSION</></link>,
+ <link linkend="SQL-CREATEFOREIGNDATAWRAPPER"><command>CREATE FOREIGN DATA WRAPPER</></link>,
+ <link linkend="SQL-ALTERFOREIGNDATAWRAPPER"><command>ALTER FOREIGN DATA WRAPPER</></link>,
+ <link linkend="SQL-DROPFOREIGNDATAWRAPPER"><command>DROP FOREIGN DATA WRAPPER</></link>,
+ <link linkend="SQL-CREATEFOREIGNTABLE"><command>CREATE FOREIGN TABLE</></link>,
+ <link linkend="SQL-ALTERFOREIGNTABLE"><command>ALTER FOREIGN TABLE</></link>,
+ <link linkend="SQL-DROPFOREIGNTABLE"><command>DROP FOREIGN TABLE</></link>,
+ <link linkend="SQL-ALTERLARGEOBJECT"><command>ALTER LARGE OBJECT</></link>,
+ <link linkend="SQL-CREATESERVER"><command>CREATE SERVER</></link>,
+ <link linkend="SQL-ALTERSERVER"><command>ALTER SERVER</></link>,
+ <link linkend="SQL-DROPSERVER"><command>DROP SERVER</></link>,
+ <link linkend="SQL-CREATETRIGGER"><command>CREATE TRIGGER</></link>,
+ <link linkend="SQL-ALTERTRIGGER"><command>ALTER TRIGGER</></link>,
+ <link linkend="SQL-DROPTRIGGER"><command>DROP TRIGGER</></link>,
+ <link linkend="SQL-CREATEUSERMAPPING"><command>CREATE USER MAPPING</></link>,
+ <link linkend="SQL-ALTERUSERMAPPING"><command>ALTER USER MAPPING</></link>,
+ <link linkend="SQL-DROPUSERMAPPING"><command>DROP USER MAPPING</></link>,
+ <link linkend="SQL-LISTEN"><command>LISTEN</></link>,
+ <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>,
+ <link linkend="SQL-RELEASE-SAVEPOINT"><command>RELEASE SAVEPOINT</></link>,
+ <link linkend="SQL-ROLLBACK-TO"><command>ROLLBACK TO SAVEPOINT</></link>,
+ <link linkend="SQL-SAVEPOINT"><command>SAVEPOINT</></link>,
+ <link linkend="SQL-SECURITY-LABEL"><command>SECURITY LABEL</></link>,
+ <link linkend="SQL-UNLISTEN"><command>UNLISTEN</></link>,
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Table distribution definition cannot be changed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Distribution key of a table cannot be updated.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Triggers are not supported
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Functions are always pushed down to the data nodes. This can be dangerous if a stored function tries to use data that is really on another node! Use with caution; it will only use data local to the node, so updates should not be done. The documentation in this area to make this clearer.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The CLUSTER command is currently broken if used without any arguments. CLUSTER does work for one table at a time, however.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ WITH queries work, however, WITH RECURSIVE is currently blocked.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ ORDER BY currently cannot be used in subqueries.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Sequences currently cannot be used in temp tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>CREATE TABLE AS EXECUTE</command> is not supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Barriers have no timeout, meaning that if a 2PC transaction is
+ stuck forever, the barrier will be stuck too.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The regression test suite needs further refinement. Some of the listed differences are because of an unsupported feature which manipulates the data set and throws off expected results. In addition, the expected plan output for some should be udpated.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+ </sect2>
+
+ </sect1>
diff --git a/doc-xc/src/sgml/release.sgmlin b/doc-xc/src/sgml/release.sgmlin
index 0d48054eb3..8c01ec1d40 100644
--- a/doc-xc/src/sgml/release.sgmlin
+++ b/doc-xc/src/sgml/release.sgmlin
@@ -43,6 +43,9 @@ can be created without links to the main documentation. Don't use <xref>.
<!## XC>
<productname>Postgres-XC</> release, with major features and migration
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> release, with major features and migration
+<!## end>
<!## PG>
<productname>PostgreSQL</> release, with major features and migration
<!## end>
@@ -65,14 +68,26 @@ can be created without links to the main documentation. Don't use <xref>.
interface</ulink> that shows changes to specific files.
</para>
<!## end>
+<!## XL>
+ <para>
+ A complete list of changes for each release can be obtained by
+ viewing the <link linkend="git">Git</link> logs for each release.
+ The <ulink
+ url="https://sourceforge.net/mailarchive/forum.php?forum_name=postgres-xl-committers">
+ <literal>postgres-xl-committers</literal>
+ email list</ulink> records all of the source code changes as well. There is also
+ a <ulink url="http://postgres-xl.git.sourceforge.net/git/gitweb.cgi?p=postgres-xl/postgres-xl;a=summary">web
+ interface</ulink> that shows changes to specific files.
+ </para>
+<!## end>
<!## PG>
<para>
A complete list of changes for each release can be obtained by
viewing the <link linkend="git">Git</link> logs for each release.
The <ulink
- url="http://archives.postgresql.org/pgsql-committers/"><literal>pgsql-committers</literal>
+ url="http://archives.postgres-xl.org/pgxl-committers/"><literal>pgxl-committers</literal>
email list</ulink> records all source code changes as well. There is also
- a <ulink url="http://git.postgresql.org/gitweb?p=postgresql.git;a=summary">web
+ a <ulink url="http://git.postgres-xl.org/gitweb?p=postgres-xl;a=summary">web
interface</ulink> that shows changes to specific files.
</para>
<!## end>
@@ -83,12 +98,16 @@ can be created without links to the main documentation. Don't use <xref>.
review, so each item is truly a community effort.
</para>
+&release-xl-9.2;
<!--
To add a new major-release series, add an entry here and in filelist.sgml.
Follow the naming convention, or you'll confuse generate_history.pl.
The reason for splitting the release notes this way is so that appropriate
subsets can easily be copied into back branches.
+<!## XL>
+&release-xl-9.2;
+<!## end>
-->
<!## XC>
&release-xc-1.0;
diff --git a/doc-xc/src/sgml/remove-node.sgmlin b/doc-xc/src/sgml/remove-node.sgmlin
new file mode 100644
index 0000000000..8573abc3d7
--- /dev/null
+++ b/doc-xc/src/sgml/remove-node.sgmlin
@@ -0,0 +1,160 @@
+<!-- doc/src/sgml/remove-node.sgml -->
+
+<chapter id="remove-node">
+ <title>Removing an Existing Node</title>
+
+ <indexterm zone="remove-node">
+ <primary>Remove an existing node</primary>
+ </indexterm>
+
+<!## XC>
+&xconly;
+<!## end>
+<!## XL>
+&xlonly;
+<!## end>
+
+ <para>
+ This chapter outlines steps to remove an existing coordinator or a datanode from a running cluster.
+ </para>
+
+ <para>
+ </para>
+
+ <sect1 id="remove-node-coordinator">
+ <title>Removing an Existing Coordinator</title>
+
+ <indexterm zone="remove-node-coordinator">
+ <primary>Remove an existing coordinator</primary>
+ </indexterm>
+
+ <para>
+ Assume a two coordinator cluster, COORD_1 and COORD_2. Suppose we want to remove COORD_2 for any reason. The following steps should be performed to remove an existing coordinator from a running cluster:
+ </para>
+
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Stop the coordinator to be removed. In our example we need to stop COORD_2.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the coordinators except the one to be removed. In our example assuming COORD_1 is running on port 5432, the following command would connect to COORD_1
+ </para>
+ <programlisting>
+ psql postgres -p 5432
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Drop the coordinator to be removed. For example to drop coordinator COORD_2
+ </para>
+ <programlisting>
+ DROP NODE COORD_2;
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update the connection information cached in pooler.
+ </para>
+ <programlisting>
+ SELECT pgxc_pool_reload();
+ </programlisting>
+ </listitem>
+
+ </orderedlist>
+ </para>
+ <para>
+ COORD_2 is now removed from the cluster and COORD_1 would work as if COORD_2 never existed.
+ </para>
+ <para>
+ CAUTION : If COORD_2 is still running and clients are connected to it, any queries issued would create inconsistencies in the cluster.
+ </para>
+
+ </sect1>
+
+ <sect1 id="remove-node-datanode">
+ <title>Removing an Existing Datanode</title>
+
+ <indexterm zone="remove-node-datanode">
+ <primary>Remove an existing Datanode</primary>
+ </indexterm>
+
+ <para>
+ Assume a two coordinator cluster, COORD_1 and COORD_2 with three datanodes DATA_NODE_1, DATA_NODE_2 and DATA_NODE_3. Suppose we want to remove DATA_NODE_3 for any reason. Further assume there is a table named rr_tab_foo distributed in round robin fashion and has rows on all the three datanodes. Following steps should be performed to remove an existing datanode from a running cluster:
+ </para>
+
+ <para>
+ <orderedlist>
+
+ <listitem>
+ <para>
+ Transfer the data from the datanode to be removed to the rest of the datanodes for all the tables in all the databases. For example to shift data of the table rr_tab_foo to the rest of the nodes we can use command:
+ </para>
+ <programlisting>
+ ALTER TABLE rr_tab_foo DELETE NODE (DATA_NODE_3);
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Confirm that there is no data left on the datanode to be removed. For example to confirm that there is no data left on DATA_NODE_3, we can use the following command, it should return ZERO rows. In case of non-zero rows it returns the OIDs of the relations whose data still exists on DATA_NODE_3.
+ </para>
+ <programlisting>
+ SELECT c.pcrelid FROM pgxc_class c, pgxc_node n WHERE n.node_name = 'DATA_NODE_3' AND n.oid = ANY (c.nodeoids);
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Stop the datanode server to be removed. Now any SELECTs or DMLs that involve the datanode to be removed would start failing.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Connect to any of the coordinators. In our example assuming COORD_1 is running on port 5432, the following command would connect to COORD_1.
+ </para>
+ <programlisting>
+ psql postgres -p 5432
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Drop the datanode to be removed. For example to drop datanode DATA_NODE_3 use command.
+ </para>
+ <programlisting>
+ DROP NODE DATA_NODE_3;
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update the connection information cached in pooler.
+ </para>
+ <programlisting>
+ SELECT pgxc_pool_reload();
+ </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repeat the above three steps (4,5,6) for all the coordinators in the cluster. In our example we would need to repeat the above steps by connecting to COORD_2.
+ </para>
+ </listitem>
+
+ </orderedlist>
+ </para>
+ <para>
+ DATA_NODE_3 is now removed from the cluster.
+ </para>
+
+ </sect1>
+
+</chapter>
diff --git a/doc-xc/src/sgml/rules.sgmlin b/doc-xc/src/sgml/rules.sgmlin
index b35812a037..174787d298 100644
--- a/doc-xc/src/sgml/rules.sgmlin
+++ b/doc-xc/src/sgml/rules.sgmlin
@@ -669,6 +669,14 @@ SELECT shoe_ready.shoename, shoe_ready.sh_avail,
of <productname>Postgres-XC</productname>.
</para>
<!## end>
+<!## XL>
+&pgonly
+<para>
+ Non-<command>SELECT</command> statements in rules are not
+ supported by the current version
+ of <productname>Postgres-XL</productname>.
+</para>
+<!## end>
<!## PG>
<para>
@@ -1973,6 +1981,14 @@ SELECT * FROM phone_number WHERE tricky(person, phone);
future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+<para>
+ Trigger is not supported by the current release
+ of <productname>Postgres-XL</>. This may be supported in the
+ future releases.
+</para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/runtime.sgmlin b/doc-xc/src/sgml/runtime.sgmlin
index 403612c43d..3ec7c184ea 100644
--- a/doc-xc/src/sgml/runtime.sgmlin
+++ b/doc-xc/src/sgml/runtime.sgmlin
@@ -15,6 +15,9 @@
<!## XC>
<title>The <productname>Postgres-XC</productname> User Account</title>
<!## end>
+<!## XL>
+ <title>The <productname>Postgres-XL</productname> User Account</title>
+<!## end>
<indexterm>
<primary>postgres user</primary>
@@ -28,6 +31,9 @@
<!## XC>
it is advisable to run <productname>Postgres-XC</productname> under a
<!## end>
+<!## XL>
+ it is advisable to run <productname>Postgres-XL</productname> under a
+<!## end>
separate user account. This user account should only own the data
that is managed by the server, and should not be shared with other
daemons. (For example, using the user <literal>nobody</literal> is a bad
@@ -56,6 +62,16 @@
<see>database cluster</see>
</indexterm>
+<!## XL>
+ <para>
+ The steps to configure a <productname>Postgres-XL</productname>
+ cluster can be cumbersome. It is highly recommended that you make use
+ of a utility called <xref linkend="pgxc-ctl"> to make this task easier,
+ and you can skip a lot of the content in this chapter.
+ That said, you may read on to understand how to manually configure
+ the cluster, which essentially describes the steps that <xref linkend="pgxc-ctl"> does.
+ </para>
+<!## end>
<para>
Before you can do anything, you must initialize a database storage
area on disk. We call this a <firstterm>database cluster</firstterm>.
@@ -109,6 +125,15 @@
<prompt>$</> <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
</screen>
<!## end>
+<!## XL>
+ installed with <productname>Postgres-XL</productname>. The desired
+ file system location of your database cluster is indicated by the
+ <option>-D</option> option. You also need to define a node name for
+ the cluster element initialized, for example:
+<screen>
+<prompt>$</> <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
+</screen>
+<!## end>
<!## PG>
Note that you must execute this command while logged into the
<productname>PostgreSQL</productname> user account, which is
@@ -123,8 +148,16 @@
each <firstterm>Coordinator</> and <firstterm>Datanode</> if you
are configuring them in a same server.
<!## end>
+<!## XL>
+&xlonly;
+ Note that you must execute this command while logged into the
+ <productname>Postgres-XL</productname> user account, which is
+ described in the previous section. You should assign
+ separate <firstterm>data directory</> to
+ each <firstterm>Coordinator</> and <firstterm>Datanode</> if you
+ are configuring them in a same server.
+<!## end>
</para>
-&xconly;
<tip>
<para>
As an alternative to the <option>-D</option> option, you can set
@@ -142,6 +175,17 @@
<option>--nodename</option> is mandatory for all the nodes at initialization
</para>
<!## end>
+<!## XL>
+ <para>
+ If you configure multiple <firstterm>Coordinator</>
+ and/or <firstterm>Datanode</>, you cannot
+ share <envar>PGDATA</envar> among them and you must
+ specify <firstterm>data directory</> explicitly.
+ </para>
+ <para>
+ <option>--nodename</option> is mandatory for all the nodes at initialization
+ </para>
+<!## end>
</tip>
&common;
<para>
@@ -158,6 +202,11 @@
<prompt>$</> <userinput>pg_ctl -D /usr/local/pgsql/data -o '--nodename foo' initdb</userinput>
</screen>
<!## end>
+<!## XL>
+<screen>
+<prompt>$</> <userinput>pg_ctl -D /usr/local/pgsql/data -o '--nodename foo' initdb</userinput>
+</screen>
+<!## end>
This may be more intuitive if you are
using <command>pg_ctl</command> for starting and stopping the
server (see <xref linkend="server-start">), so
@@ -177,6 +226,9 @@
<!## XC>
<productname>Postgres-XC</productname> user. Here is how this might
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> user. Here is how this might
+<!## end>
be done:
<screen>
root# <userinput>mkdir /usr/local/pgsql/data</userinput>
@@ -201,6 +253,9 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
<!## XC>
<productname>Postgres-XC</productname> user.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> user.
+<!## end>
</para>
<para>
@@ -265,6 +320,9 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
<!## XC>
<acronym>NFS</> internally. <productname>Postgres-XC</> does nothing
<!## end>
+<!## XL>
+ <acronym>NFS</> internally. <productname>Postgres-XL</> does nothing
+<!## end>
special for <acronym>NFS</> file systems, meaning it assumes
<acronym>NFS</> behaves exactly like locally-connected drives
(<acronym>DAS</>, Direct Attached Storage). If client and server
@@ -290,6 +348,9 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
<!## XC>
<title>Starting Postgres-XC Cluster</title>
<!## end>
+<!## XL>
+ <title>Starting Postgres-XL Cluster</title>
+<!## end>
<!## XC>
&xconly;
@@ -436,7 +497,7 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
<para>
GTM-Proxy is not a mandatory component of Postgres-XC cluster but
it can be used to group messages between GTM and cluster nodes,
- reducing worload and the number of packages exchanged through network.
+ reducing workload and the number of packages exchanged through network.
</para>
<para>
@@ -757,6 +818,571 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data --nodename foo</userinput>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Before anyone can access <productname>Postgres-XL</>
+ (or <productname>XL</> in short) database, you must
+ start <productname>XL</> database cluster.
+ As described in the previous chapter, <productname>XL</> consists of
+ various components.
+ Minimum set of components are GTM, GTM-Proxy, Coordinator and
+ Datanode.
+ You must configure and start each of them.
+ Following sections will give you how to configure and start them.
+ <filename>pgxc_clean</> and <filename>GTM-Standby</> are described in high-availability
+ sections.
+ </para>
+
+ <sect2 id="creating-databases">
+ <title>Creating Databases</title>
+&xlonly;
+ <para>
+ You should initialize each database which
+ composes <productname>Postgres-XL</> database cluster system.
+ Both Coordinator and Datanode has its own database and you should
+ initialize these database.
+ Coordinator holds just database catalog and temporary data store.
+ Datanode holds most of your data.
+ First of all, you should determine how many Coordinators/Datanodes
+ to run and where they should run.
+ It is a good convention that you run a Coordinator where you run a
+ Datanode.
+ In this case, you should run <filename>GTM-Proxy</> on the same
+ server too.
+ It simplifies <productname>XL</> configuration and help to make
+ workload of each servers even.
+ </para>
+
+ <para>
+ Both Coordinator and Datanode have their
+ own databases, essentially <productname>PostgreSQL</> databases.
+ They are separate and you should initialize them separately.
+ </para>
+ </sect2>
+
+ <sect2 id="gtm-start">
+ <title>Starting GTM</title>
+&xlonly;
+ <para>
+ GTM provides global transaction management feature to all the
+ other components in <productname>Postgres-XL</> database cluster.
+ Because GTM handles transaction requirements from all
+ the Coordinators and Datanodes, it is highly advised to run this
+ in a separate server.
+ </para>
+
+ <para>
+ Before you start GTM, you should decide followings:
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>Where to run GTM</term>
+ <listitem>
+
+ <para>
+ Because GTM receives all the request to begin/end
+ transactions and to refer to sequence values, you should
+ run GTM in a separate server. If you
+ run GTM in the same server as Datanode or
+ Coordinator, it will become harder to make workload reasonably
+ balanced.
+ </para>
+ <para>
+ Then, you should determine GTM's working directory.
+ Please create this directory before you run GTM.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Listen address and port of GTM</term>
+ <listitem>
+ <para>
+ Next, you should determine listen address and port
+ of GTM.
+ Listen address can be either the IP address or host name which
+ receives request from other component,
+ typically <filename>GTM-Proxy</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>GTM id</term>
+ <listitem>
+ <para>
+ You have a chance to run more than one GTM in
+ one <productname>Postgres-XL</> cluster.
+ For example, if you need a backup of GTM in
+ high-availability environment, you need to run
+ two GTMs.
+ You should give unique GTM id to each of such GTMs.
+ GTM id value begins with one.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ <para>
+ When this is determined, you can initialize GTM with the command <xref
+ linkend="app-initgtm">,
+ for example:
+<screen>
+<prompt>$</> <userinput>initgtm -Z gtm -D /usr/local/pgsql/data_gtm</userinput>
+</screen>
+ </para>
+
+ <para>
+ All the parameters related to GTM can be modified in <filename>gtm.conf</filename>
+ located in data folder initialized by <command>initgtm</command>.
+ </para>
+
+ <para>
+ Then you can start GTM as follows:
+<!-- Check precise parameters -->
+<screen>
+<prompt>$</> <userinput>gtm -D /usr/local/pgsql/data_gtm</userinput>
+</screen>
+ where <option>-D</> option specifies working directory of GTM.
+ </para>
+ <para>
+ Alternatively, GTM can be started using <command>gtm_ctl</>, for example:
+<screen>
+<prompt>$</> <userinput>gtm_ctl -Z gtm start -D /usr/local/pgsql/data_gtm</userinput>
+</screen>
+ </para>
+
+ </sect2>
+ <sect2 id="gtm-proxy-start">
+ <title>Starting GTM-Proxy</title>
+&xlonly;
+ <para>
+ GTM-Proxy is not a mandatory component of Postgres-XL cluster but
+ it can be used to group messages between GTM and cluster nodes,
+ reducing workload and the number of packages exchanged through network.
+ </para>
+
+ <para>
+ As described in the previous section, <filename>GTM-Proxy</> needs
+ its own listen address, port, working directory and GTM-Proxy ID,
+ which should be unique and begins with one.
+ In addition, you should determine how many working threads to
+ run.
+ You should also use GTM's address and port to start <filename>GTM-Proxy</>.
+ </para>
+
+ <para>
+ Then, you need first to initialize GTM-Proxy with <command>initgtm</command>,
+ for example:
+<screen>
+<prompt>$</> <userinput>initgtm -Z gtm_proxy -D /usr/local/pgsql/data_gtm_proxy</userinput>
+</screen>
+ </para>
+
+ <para>
+ All the parameters related to GTM-Proxy can be modified in <filename>gtm_proxy.conf</filename>
+ located in data folder initialized by <command>initgtm</command>.
+ </para>
+
+ <para>
+ Then, you can start <filename>GTM-Proxy</> like:
+<screen>
+<prompt>$</> <userinput>gtm_proxy -D /usr/local/pgsql/data_gtm_proxy</userinput>
+</screen>
+ where <option>-D</> specifies <filename>GTM-Proxy</>'s working
+ directory.
+ </para>
+
+ <para>
+ Alternatively, you can start GTM-Proxy using <filename>gtm_ctl</>
+ as follows:
+<screen>
+<prompt>$</> <userinput>gtm_ctl start -Z gtm_proxy -D /usr/local/pgsql/data_gtm_proxy</userinput>
+</screen>
+ </para>
+
+ </sect2>
+
+ <sect2 id="Datanode-configuration">
+ <title>Configuring Datanodes</title>
+&xlonly;
+ <para>
+ Before starting Coordinator or Datanode, you must configure them.
+ You can configure Coordinator or Datanode by
+ editing <filename>postgresql.conf</> file located at their working
+ directory as you specified by <option>-D</> option
+ in <filename>initdb</> command.
+ </para>
+
+ <para>
+ Datanode is almost native <productname>PostgreSQL</> with some
+ extension.
+ Additional options in <filename>postgresql.conf</> for the
+ Datanode are as follows:
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>max_connections</term>
+ <listitem>
+
+ <para>
+ This value is not just a number of connections you expect to each
+ Coordinator.
+ Each Coordinator backend has a chance to connect to all the
+ Datanode.
+ You should specify number of total connections whole Coordinator
+ may accept.
+ For example, if you have five Coordinators and each of them may
+ accept forty connections, you should specify 200 as this
+ parameter value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>max_prepared_transactions</term>
+ <listitem>
+ <para>
+ Even though your application does not intend to
+ issue <command>PREPARE TRANSACTION</>, Coordinator may issue this
+ internally when more than one Datanode are involved.
+ You should specify this parameter the same value
+ as <filename>max_connections</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pgxc_node_name</term>
+ <listitem>
+ <para>
+ GTM needs to identify each Datanode, as specified by
+ this parameter.
+ The value should be unique and start with one.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>port</term>
+ <listitem>
+ <para>
+ Because both Coordinator and Datanode may run on the same server,
+ you may want to assign separate port number to the Datanode.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gtm_port</term>
+ <listitem>
+ <para>
+ Specify the port number of GTM-Proxy, as specified
+ in <option>-p</> option in <command>gtm_proxy</>
+ or <command>gtm_ctl</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gtm_host</term>
+ <listitem>
+ <para>
+ Specify the host name or IP address of GTM-Proxy, as specified
+ in <option>-h</> option in <command>gtm_proxy</>
+ or <command>gtm_ctl</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>shared_queues</term>
+ <listitem>
+ <para>
+ For some joins that occur in queries, data from one Datanode may
+ need to be joined with data from another Datanode.
+ <productname>Postgres-XL</productname> uses shared queues for this purpose.
+ During execution each Datanode knows if it needs to produce or consume
+ tuples, or both.
+ </para>
+ <para>
+ Note that there may be mulitple shared_queues used even for a single
+ query. So a value should be set taking into account the number of
+ connections it can accept and expected number of such joins occurring
+ simultaneously.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>shared_queue_size</term>
+ <listitem>
+ <para>
+ This parameter sets the size of each each shared queue allocated.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+
+ <sect2 id="Coordinator-configuration">
+ <title>Configuring Coordinators</title>
+&xlonly;
+ <para>
+ Although Coordinator and Datanode shares the same binary, their
+ configuration is a little different due to their functionalities.
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>max_connections</term>
+ <listitem>
+ <para>
+ You don't have to take other Coordinator or Datanode into
+ account.
+ Just specify the number of connections the Coordinator accepts
+ from applications.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>max_prepared_transactions</term>
+ <listitem>
+ <para>
+ Specify at least total number of Coordinators in the cluster.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pgxc_node_name</term>
+ <listitem>
+ <para>
+ GTM needs to identify each Datanode, as specified by
+ this parameter.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>port</term>
+ <listitem>
+ <para>
+ Because both Coordinator and Datanode may run on the same server,
+ you may want to assign separate port number to the Coordinator.
+ It may be convenient to use default value of PostgreSQL listen
+ port.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gtm_port</term>
+ <listitem>
+ <para>
+ Specify the port number of GTM-Proxy, as specified
+ in <option>-p</> option in <command>gtm_proxy</>
+ or <command>gtm_ctl</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gtm_host</term>
+ <listitem>
+ <para>
+ Specify the host name or IP address of GTM-Proxy, as specified
+ in <option>-h</> option in <command>gtm_proxy</>
+ or <command>gtm_ctl</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>max_pool_size</term>
+ <listitem>
+ <para>
+ Coordinator maintains connections to Datanode as a pool.
+ This parameter specifies max number of connections the
+ Coordinator maintains.
+ Specify <option>max_connection</> value of remote nodes as this
+ parameter value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>min_pool_size</term>
+ <listitem>
+ <para>
+ This is the minimum number of Coordinator to remote node connections
+ maintained by the pooler.
+ Typically specify 1.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pool_conn_keepalive</term>
+ <listitem>
+ <para>
+ This parameter specifies how long to keep the connection alive.
+ If older than this amount, the pooler discards the connection.
+ This parameter is useful in multi-tenant environments where
+ many connections to many different databases may be used,
+ so that idle connections may cleaned up. It is also useful
+ for automatically closing connections occasionally in case
+ there is some unknown memory leak so that this memory can be freed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pool_maintenance_timeout</term>
+ <listitem>
+ <para>
+ This parameter specifies how long to wait until pooler
+ maintenance is performed. During such maintenance,
+ old idle connections are discarded.
+ This parameter is useful in multi-tenant environments where
+ many connections to many different databases may be used,
+ so that idle connections may cleaned up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>remote_query_cost</term>
+ <listitem>
+ <para>
+ This parameter specifies the cost overhead of setting up
+ a remote query to obtain remote data. It is used by
+ the planner in costing queries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>network_byte_cost</term>
+ <listitem>
+ <para>
+ This parameter is used in query cost planning to
+ estimate the cost involved in row shipping and obtaining
+ remote data based on the expected data size.
+ Row shipping is expensive and adds latency, so this
+ setting helps to favor plans that minimizes row shipping.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>sequence_range</term>
+ <listitem>
+ <para>
+ This parameter is used to get several sequence values
+ at once from GTM. This greatly speeds up COPY and INSERT SELECT
+ operations where the target table uses sequences.
+ <productname>Postgres-XL</productname> will not use this entire
+ amount at once, but will increase the request size over
+ time if many requests are done in a short time frame in
+ the same session.
+ After a short time without any sequence requests, decreases back down to 1.
+ Note that any settings here are overriden if the CACHE clause was
+ used in <xref linkend='sql-createsequence'> or <xref linkend='sql-altersequence'>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>max_coordinators</term>
+ <listitem>
+ <para>
+ This is the maximum number of Coordinators that can be configured in the cluster.
+ Specify exact number if it is not planned to add more Coordinators
+ while cluster is running, or greater, if it is desired to dynamically
+ resize cluster. It costs about 140 bytes of shared memory per slot.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>max_datanodes</term>
+ <listitem>
+ <para>
+ This is the maximum number of Datanodes configured in the cluster.
+ Specify exact number if it is not planned to add more Datanodes
+ while cluster is running, or greater, if it is desired to dynamically
+ resize cluster. It costs about 140 bytes of shared memory per slot.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>enforce_two_phase_commit</term>
+ <listitem>
+ <para>
+ Enforce the usage of two-phase commit on transactions involving ON COMMIT actions
+ or temporary objects. Usage of autocommit instead of two-phase commit may break data
+ consistency so use at your own risk.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </sect2>
+
+ <sect2 id="starting-Datanode">
+ <title>Starting Datanodes</title>
+
+ <para>
+ Now you can start central component
+ of <productname>Postgres-XL</>, Datanode and Coordinator.
+ If you're familiar with starting <productname>PostgreSQL</>
+ database server, this step is very similar to <productname>PostgreSQL</>.
+ </para>
+
+ <para>
+ You can start a Datanode as follows:
+<screen>
+<prompt>$</> <userinput>postgres --datanode -D /usr/local/pgsql/data</userinput>
+</screen>
+ <option>--datanode</> specifies <command>postgres</> should run as a
+ Datanode. You may need to specify <option>-i</> <command>postgres</> to
+ accept connection from TCP/IP connections or edit <filename>pg_hba.conf</filename>
+ if cluster uses nodes among several servers.
+ </para>
+
+ </sect2>
+
+ <sect2 id="starting-Coordinator">
+ <title>Starting Coordinators</title>
+&xlonly;
+ <para>
+ You can start a Coordinator as follows:
+<screen>
+<prompt>$</> <userinput>postgres --coordinator -D /usr/local/pgsql/Datanode</userinput>
+</screen>
+ <option>--coordinator</> specifies <command>postgres</> should run as a
+ Coordinator. You may need to specify <option>-i</> <command>postgres</> to
+ accept connection from TCP/IP connections or edit <filename>pg_hba.conf</filename>
+ if cluster uses nodes among several servers.
+ </para>
+
+ </sect2>
+
+
+<!## end>
<!## PG>
<para>
Before anyone can access the database, you must start the database
@@ -1058,6 +1684,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
A large <productname>Postgres-XC</> installation can quickly exhaust
<!## end>
+<!## XL>
+ A large <productname>Postgres-XL</> installation can quickly exhaust
+<!## end>
various operating system resource limits. (On some systems, the
factory defaults are so low that you don't even need a really
<quote>large</> installation.) If you have encountered this kind of
@@ -1085,6 +1714,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
relevant for <productname>Postgres-XC</>). Almost all modern
<!## end>
+<!## XL>
+ relevant for <productname>Postgres-XL</>). Almost all modern
+<!## end>
operating systems provide these features, but many of them don't have
them turned on or sufficiently sized by default, especially as
available RAM and the demands of database applications grow.
@@ -1095,6 +1727,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</> provides its own replacement
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> provides its own replacement
+<!## end>
implementation of these facilities, so most of this section
can be disregarded.)
</para>
@@ -1109,6 +1744,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
kernel. <productname>Postgres-XC</> won't work without them.
<!## end>
+<!## XL>
+ kernel. <productname>Postgres-XL</> won't work without them.
+<!## end>
This situation is rare, however, among modern operating systems.
</para>
@@ -1119,6 +1757,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
When <productname>Postgres-XC</> exceeds one of the various hard
<!## end>
+<!## XL>
+ When <productname>Postgres-XL</> exceeds one of the various hard
+<!## end>
<acronym>IPC</> limits, the server will refuse to start and
should leave an instructive error message describing the problem
and what to do about it. (See also <xref
@@ -1220,6 +1861,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</> configuration parameters, as shown in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> configuration parameters, as shown in
+<!## end>
<xref linkend="shared-memory-parameters">. (Any error message you might
get will include the exact size of the failed allocation request.)
You can, as a temporary solution, lower some of those settings to
@@ -1230,6 +1874,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</> to run with <varname>SHMMAX</> as small as
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> to run with <varname>SHMMAX</> as small as
+<!## end>
2 MB, you need considerably more for acceptable performance. Desirable
settings are in the hundreds of megabytes to a few gigabytes.
</para>
@@ -1243,6 +1890,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
for <productname>Postgres-XC</> plus any other applications that
<!## end>
+<!## XL>
+ for <productname>Postgres-XL</> plus any other applications that
+<!## end>
are using shared memory segments. Note that <varname>SHMALL</>
is measured in pages rather than bytes on many systems.
</para>
@@ -1256,6 +1906,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
approximately 500 kB for <productname>Postgres-XC</> (it is
<!## end>
+<!## XL>
+ approximately 500 kB for <productname>Postgres-XL</> (it is
+<!## end>
usually just 1). The maximum number of segments system-wide
(<varname>SHMMNI</>) or per-process (<varname>SHMSEG</>) are unlikely
to cause a problem unless your system has them set to zero.
@@ -1268,6 +1921,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</> uses one semaphore per allowed connection
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> uses one semaphore per allowed connection
+<!## end>
(<xref linkend="guc-max-connections">) and allowed autovacuum worker
process (<xref linkend="guc-autovacuum-max-workers">), in sets of 16.
Each such set will
@@ -1310,6 +1966,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</para>
<para>
@@ -1321,6 +1980,9 @@ psql: could not connect to server: No such file or directory
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</para>
@@ -1382,6 +2044,9 @@ options "SHMMAX=\(SHMALL*PAGE_SIZE\)"
<!## XC>
50 <productname>Postgres-XC</productname> connections. Set the
<!## end>
+<!## XL>
+ 50 <productname>Postgres-XL</productname> connections. Set the
+<!## end>
values you want in your kernel configuration file, e.g.:
<programlisting>
options "SEMMNI=40"
@@ -1444,6 +2109,9 @@ options "SEMMNS=240"
<!## XC>
and it allows the Postgres-XC IPC cleanup code to function properly.
<!## end>
+<!## XL>
+ and it allows the Postgres-XL IPC cleanup code to function properly.
+<!## end>
(In FreeBSD 6.0 and later the IPC cleanup code does not properly detect
processes in other jails, preventing the running of postmasters on the
same port in different jails.)
@@ -1527,6 +2195,9 @@ options SEMMAP=256
<!## XC>
for very small <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ for very small <productname>Postgres-XL</productname>
+<!## end>
installations. The default maximum total size is 2097152
pages. A page is almost always 4096 bytes except in unusual
kernel configurations with <quote>huge pages</quote>
@@ -1668,6 +2339,9 @@ sysctl -w kern.sysv.shmall
<!## XC>
<productname>Postgres-XC</>. The relevant settings can be changed in
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. The relevant settings can be changed in
+<!## end>
<filename>/etc/system</>, for example:
<programlisting>
set shmsys:shminfo_shmmax=0x2000000
@@ -1775,6 +2449,9 @@ project.max-msg-ids=(priv,4096,deny)
<!## XC>
<title><productname>Postgres-XC</productname> Shared Memory Usage</>
<!## end>
+<!## XL>
+ <title><productname>Postgres-XL</productname> Shared Memory Usage</>
+<!## end>
<tgroup cols="2">
<thead>
@@ -1837,6 +2514,9 @@ project.max-msg-ids=(priv,4096,deny)
<!## XC>
<productname>Postgres-XC</productname> server. Of particular
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server. Of particular
+<!## end>
importance are limits on the number of processes per user, the
number of open files per process, and the amount of memory available
to each process. Each of these have a <quote>hard</quote> and a
@@ -1891,6 +2571,9 @@ default:\
<!## XC>
The <productname>Postgres-XC</productname> server uses one process
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</productname> server uses one process
+<!## end>
per connection so you should provide for at least as many processes
as allowed connections, in addition to what you need for the rest
of your system. This is usually not a problem but if you run
@@ -1917,6 +2600,9 @@ default:\
<!## XC>
system-wide limit, you can set <productname>Postgres-XC</>'s <xref
<!## end>
+<!## XL>
+ system-wide limit, you can set <productname>Postgres-XL</>'s <xref
+<!## end>
linkend="guc-max-files-per-process"> configuration parameter to
limit the consumption of open files.
</para>
@@ -1933,6 +2619,9 @@ default:\
<!## XC>
optimal for <productname>Postgres-XC</productname>. Because of the
<!## end>
+<!## XL>
+ optimal for <productname>Postgres-XL</productname>. Because of the
+<!## end>
way that the kernel implements memory overcommit, the kernel might
<!## PG>
terminate the <productname>PostgreSQL</productname> server (the
@@ -1940,6 +2629,9 @@ default:\
<!## XC>
terminate the <productname>Postgres-XC</productname> server (the
<!## end>
+<!## XL>
+ terminate the <productname>Postgres-XL</productname> server (the
+<!## end>
master server process) if the memory demands of
another process cause the system to run out of virtual memory.
</para>
@@ -1961,6 +2653,9 @@ Out of Memory: Killed process 12345 (postgres).
<!## XC>
<productname>Postgres-XC</productname> will need to be restarted.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will need to be restarted.
+<!## end>
</para>
<para>
@@ -1971,6 +2666,9 @@ Out of Memory: Killed process 12345 (postgres).
<!## XC>
<productname>Postgres-XC</productname> on a machine where you can
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> on a machine where you can
+<!## end>
be sure that other processes will not run the machine out of
memory. If memory is tight, increasing the swap space of the
operating system can help avoid the problem, because the
@@ -2013,6 +2711,9 @@ echo -17 > /proc/self/oom_adj
<!## XC>
do this, you may also wish to build <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ do this, you may also wish to build <productname>Postgres-XL</>
+<!## end>
with <literal>-DLINUX_OOM_ADJ=0</> added to <varname>CFLAGS</>.
That will cause postmaster child processes to run with the normal
<varname>oom_adj</> value of zero, so that the OOM killer can still
@@ -2045,8 +2746,20 @@ echo -17 > /proc/self/oom_adj
<indexterm zone="server-shutdown">
<primary>shutdown</>
</indexterm>
-&xconly;
<!## XC>
+&xconly;
+ <para>
+ This section describes how to shutdown each Coordinator and
+ Datanode.
+ Please note that you should shutdown Coordinator first and then
+ Datanodes, GTM-Proxy and GTM.
+ </para>
+
+ <sect2 id="Coordinator-Datanode-shutdown">
+ <title>Shutting Down Coordinators and Datanodes</title>
+
+<!## end>
+<!## XL>
<para>
This section describes how to shutdown each Coordinator and
Datanode.
@@ -2183,6 +2896,36 @@ $ <userinput>kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</userinput
</sect2>
<!## end>
+<!## XL>
+
+ <sect2 id="shutting-down-gtm-proxy">
+ <title>Shutting Down GTM-Proxies</title>
+
+&common;
+ <para>
+ You can shut down GTM-Proxies by sending SIGKILL, SIGTERM, SIGQUIT,
+ SIGINT or SIGHUP to each GTM-Proxy process.
+ GTM-Proxy process number is recorded in the
+ file <filename>gtm_proxy.pid</> located in each GTM-Proxy's working
+ directory.
+ </para>
+
+ </sect2>
+
+ <sect2 id="shutting-down-gtm">
+ <title>Shutting Down GTM</title>
+&xlonly;
+ <para>
+ You can shut down GTM by sending SIGKILL, SIGTERM, SIGQUIT,
+ SIGINT or SIGHUP to GTM process.
+ GTM process number is recorded in the
+ file <filename>gtm.pid</> located in GTM's working
+ directory.
+ </para>
+
+ </sect2>
+
+<!## end>
</sect1>
@@ -2203,8 +2946,8 @@ $ <userinput>kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</userinput
<productname>PostgreSQL</> release to a newer one.
</para>
-&xconly;
<!## XC>
+&xconly;
<para>
Because <productname>Postgres-XC</>'s Coordinators and Datanodes
are essentially <productname>PostgreSQL</> servers, you can follw
@@ -2212,6 +2955,14 @@ $ <userinput>kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</userinput
that you should do this manually.
</para>
<!## end>
+<!## XL>
+ <para>
+ Because <productname>Postgres-XL</>'s Coordinators and Datanodes
+ are essentially <productname>PostgreSQL</> servers, you can follw
+ the steps described below to upgrade each of them. Please note
+ that you should do this manually.
+ </para>
+<!## end>
<para>
<productname>PostgreSQL</> major versions are represented by the
@@ -2255,6 +3006,16 @@ $ <userinput>kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</userinput
versions, be sure to read the release notes for each intervening
version.
<!## end>
+<!## XL>
+<!-- PG release notes are not attached in XL reference -->
+ New major versions also typically introduce some user-visible
+ incompatibilities, so application programming changes might be required.
+ All user-visible changes are listed in the release notes;
+ pay particular attention to the section
+ labeled "Migration". If you are upgrading across several major
+ versions, be sure to read the release notes for each intervening
+ version.
+<!## end>
</para>
<para>
@@ -2514,6 +3275,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
<title>Preventing Coordinator/Datanode Spoofing</title>
<!## end>
+<!## XL>
+ <title>Preventing Coordinator/Datanode Spoofing</title>
+<!## end>
<indexterm zone="preventing-server-spoofing">
<primary>server spoofing</primary>
@@ -2527,6 +3291,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
While Coordinators and Datanodes are running, it is not possible for a malicious user
<!## end>
+<!## XL>
+ While Coordinators and Datanodes are running, it is not possible for a malicious user
+<!## end>
to take the place of the normal database server. However, when the
server is down, it is possible for a local user to spoof the normal
server by starting their own server. The spoof server could read
@@ -2579,6 +3346,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
<productname>Postgres-XC</productname> offers encryption at several
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> offers encryption at several
+<!## end>
levels, and provides flexibility in protecting data from disclosure
due to database server theft, unscrupulous administrators, and
insecure networks. Encryption might also be required to secure
@@ -2737,6 +3507,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
<productname>Postgres-XC</> has native support for using
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> has native support for using
+<!## end>
<acronym>SSL</> connections to encrypt client/server communications
for increased security. This requires that
<productname>OpenSSL</productname> is installed on both client and
@@ -2746,6 +3519,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
server systems and that support in <productname>Postgres-XC</> is
<!## end>
+<!## XL>
+ server systems and that support in <productname>Postgres-XL</> is
+<!## end>
enabled at build time (see <xref linkend="installation">).
</para>
@@ -2757,6 +3533,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
<productname>Postgres-XC</> server can be started with
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> server can be started with
+<!## end>
<acronym>SSL</> enabled by setting the parameter
<xref linkend="guc-ssl"> to <literal>on</> in
<filename>postgresql.conf</>. The server will listen for both normal
@@ -2774,6 +3553,9 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
<!## XC>
<productname>Postgres-XC</productname> reads the system-wide
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> reads the system-wide
+<!## end>
<productname>OpenSSL</productname> configuration file. By default, this
file is named <filename>openssl.cnf</filename> and is located in the
directory reported by <literal>openssl version -d</>.
@@ -2997,6 +3779,9 @@ chmod og-rwx server.key
<!## XC>
<productname>Postgres-XC</productname> server. Done properly, this
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server. Done properly, this
+<!## end>
provides an adequately secure network connection, even for non-SSL-capable
clients.
</para>
@@ -3010,6 +3795,9 @@ chmod og-rwx server.key
<!## XC>
<productname>Postgres-XC</productname> server and that you can log in using
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server and that you can log in using
+<!## end>
<command>ssh</command> as some user. Then you can establish a secure
tunnel with a command like this from the client machine:
<programlisting>
@@ -3042,6 +3830,9 @@ psql -h localhost -p 63333 postgres
<!## XC>
<productname>Postgres-XC</productname> server. This should not pose any
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server. This should not pose any
+<!## end>
extra security risk as long as they are on the same machine.
</para>
diff --git a/doc-xc/src/sgml/sourcerepo.sgmlin b/doc-xc/src/sgml/sourcerepo.sgmlin
index ea97300ca7..a102bdf19f 100644
--- a/doc-xc/src/sgml/sourcerepo.sgmlin
+++ b/doc-xc/src/sgml/sourcerepo.sgmlin
@@ -44,6 +44,24 @@
in <xref linkend="installation">.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ The <productname>Postgres-XL</productname> source code is stored and managed
+ using the <productname>Git</productname> version control system. A public
+ mirror of the master repository is available; it is updated within a minute
+ of any change to the master repository.
+ </para>
+
+ <para>
+ Note that building <productname>Postgres-XL</productname> from the source
+ repository requires reasonably up-to-date versions of <application>bison</>,
+ <application>flex</>, and <application>Perl</>. These tools are not needed
+ to build from a distribution tarball since the files they are used to build
+ are included in the tarball. Other tool requirements are the same as shown
+ in <xref linkend="installation">.
+ </para>
+<!## end>
<sect1 id="git">
<title>Getting The Source via <productname>Git</></title>
@@ -73,7 +91,12 @@
To begin using the Git repository, make a clone of the official mirror:
<programlisting>
-git clone git://git.postgresql.org/git/postgresql.git
+<!## XC>
+git clone git://postgres-xc.git.sourceforge.net/gitroot/postgres-xc/postgres-xc
+<!## end>
+<!## XL>
+git clone git://postgres-xl.git.sourceforge.net/gitroot/postgres-xl/postgres-xl
+<!## end>
</programlisting>
This will copy the full repository to your local machine, so it may take
@@ -88,7 +111,12 @@ git clone git://git.postgresql.org/git/postgresql.git
prefix to <literal>http</>, as in:
<programlisting>
-git clone http://git.postgresql.org/git/postgresql.git
+<!## XC>
+git clone http://postgres-xc.git.sourceforge.net/gitroot/postgres-xc/postgres-xc
+<!## end>
+<!## XL>
+git clone http://postgres-xl.git.sourceforge.net/gitroot/postgres-xl/postgres-xl
+<!## end>
</programlisting>
The HTTP protocol is less efficient than the Git protocol, so it will be
@@ -140,7 +168,72 @@ git fetch
To begin using the Git repository, make a clone of the official mirror:
<programlisting>
+<!## XC>
+git clone git://postgres-xc.git.sourceforge.net/gitroot/postgres-xc/postgres-xc
+<!## end>
+<!## XL>
+git clone git://postgres-xl.git.sourceforge.net/gitroot/postgres-xl/postgres-xl
+<!## end>
+</programlisting>
+
+ This will copy the full repository to your local machine, so it may take
+ a while to complete, especially if you have a slow Internet connection.
+ The files will be placed in a new subdirectory <filename>postgresql</> of
+ your current directory.
+ </para>
+
+ </step>
+
+ <step>
+ <para>
+ Whenever you want to get the latest updates in the system, <command>cd</>
+ into the repository, and run:
+
+<programlisting>
+git fetch
+</programlisting>
+ </para>
+ </step>
+ </procedure>
+
+ <para>
+ <productname>Git</> can do a lot more things than just fetch the source. For
+ more information, consult the <productname>Git</> man pages, or see the
+ website at <ulink url="http://git-scm.com"></>.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ With <productname>Git</> you will make a copy of the entire code repository
+ on your local machine, so you will have access to all history and branches
+ offline. This is the fastest and most flexible way to develop or test
+ patches.
+ </para>
+
+ <procedure>
+ <title>Git</title>
+
+ <step>
+ <para>
+ You will need an installed version of <productname>Git</>, which you can
+ get from <ulink url="http://git-scm.com"></ulink>. Many systems already
+ have a recent version of <application>Git</> installed by default, or
+ available in their package distribution system.
+ </para>
+ </step>
+
+ <step>
+ <para>
+ To begin using the Git repository, make a clone of the official mirror:
+
+<programlisting>
+<!## XC>
git clone git://postgres-xc.git.sourceforge.net/gitroot/postgres-xc/postgres-xc
+<!## end>
+<!## XL>
+git clone git://postgres-xl.git.sourceforge.net/gitroot/postgres-xl/postgres-xl
+<!## end>
</programlisting>
This will copy the full repository to your local machine, so it may take
diff --git a/doc-xc/src/sgml/sources.sgmlin b/doc-xc/src/sgml/sources.sgmlin
index 6659834c45..54d1ccbf4b 100644
--- a/doc-xc/src/sgml/sources.sgmlin
+++ b/doc-xc/src/sgml/sources.sgmlin
@@ -7,6 +7,9 @@
<!## XC>
<title>Postgres-XC Coding Conventions</title>
<!## end>
+<!## XL>
+ <title>Postgres-XL Coding Conventions</title>
+<!## end>
&common;
@@ -338,6 +341,9 @@ ereport(level, (errmsg_internal("format string", ...)));
<!## XC>
<productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>.
+<!## end>
</para>
<simplesect>
diff --git a/doc-xc/src/sgml/sql.sgmlin b/doc-xc/src/sgml/sql.sgmlin
index 2ed196f3d4..88408ced7a 100644
--- a/doc-xc/src/sgml/sql.sgmlin
+++ b/doc-xc/src/sgml/sql.sgmlin
@@ -884,6 +884,20 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
[ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] [...] ]
<!## end>
+<!## XL>
+<synopsis>
+SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replaceable> [, ...] ) ] ]
+ * | <replaceable class="PARAMETER">expression</replaceable> [ [ AS ] <replaceable class="PARAMETER">output_name</replaceable> ] [, ...]
+ [ FROM <replaceable class="PARAMETER">from_item</replaceable> [, ...] ]
+ [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]
+ [ GROUP BY <replaceable class="PARAMETER">expression</replaceable> [, ...] ]
+ [ HAVING <replaceable class="PARAMETER">condition</replaceable> [, ...] ]
+ [ { UNION | INTERSECT | EXLEPT } [ ALL ] <replaceable class="PARAMETER">select</replaceable> ]
+ [ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | USING <replaceable class="parameter">operator</replaceable> ] [ NULLS { FIRST | LAST } ] [, ...] ]
+ [ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
+ [ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
+ [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] [...] ]
+<!## end>
</para>
<para>
@@ -1493,6 +1507,12 @@ SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
You may be warned if some of them cannot be handled.
</para>
<!## end>
+<!## XL>
+ <para>
+ Subqueries in <productname>Postgres-XL</> have restrictions.
+ You may be warned if some of them cannot be handled.
+ </para>
+<!## end>
&common;
<para>
In the WHERE and HAVING clauses the use of subqueries (subselects) is
diff --git a/doc-xc/src/sgml/start.sgmlin b/doc-xc/src/sgml/start.sgmlin
index 3a61a0cf30..adbe9ae970 100644
--- a/doc-xc/src/sgml/start.sgmlin
+++ b/doc-xc/src/sgml/start.sgmlin
@@ -28,6 +28,16 @@
operating system documentation or your system administrator about
how to access <productname>Postgres-XC</productname>.
<!## end>
+ <!## XL>
+ Before you can use <productname>Postgres-XL</productname> you need
+ to install it, of course. It is possible that
+ <productname>Postgres-XL</productname> is already installed at your
+ site, either because it was included in your operating system
+ distribution or because the system administrator already installed
+ it. If that is the case, you should obtain information from the
+ operating system documentation or your system administrator about
+ how to access <productname>Postgres-XL</productname>.
+ <!## end>
</para>
<para>
@@ -49,6 +59,15 @@
unprivileged user; no superuser (<systemitem>root</systemitem>)
access is required.
<!## end>
+ <!## XL>
+ If you are not sure whether <productname>Postgres-XL</productname>
+ is already available or whether you can use it for your
+ experimentation then you can install it yourself. Doing so is not
+ hard and it can be a good exercise.
+ <productname>Postgres-XL</productname> can be installed by any
+ unprivileged user; no superuser (<systemitem>root</systemitem>)
+ access is required.
+ <!## end>
</para>
<para>
@@ -68,6 +87,14 @@
closely the section about setting up the appropriate environment
variables.
<!## end>
+ <!## XL>
+ If you are installing <productname>Postgres-XL</productname>
+ yourself, then refer to <xref linkend="installation">
+ for instructions on installation, and return to
+ this guide when the installation is complete. Be sure to follow
+ closely the section about setting up the appropriate environment
+ variables.
+ <!## end>
</para>
<para>
@@ -92,6 +119,9 @@
<!## XC>
&xconly;
<!## end>
+<!## XL>
+&xlonly;
+<!## end>
<para>
<!## PG>
@@ -108,6 +138,13 @@
<productname>Postgres-XC</productname> interact will make this
chapter somewhat clearer.
<!## end>
+<!## XL>
+ Before we proceed, you should understand the basic
+ <productname>Postgres-XL</productname> system architecture.
+ Understanding how the parts of
+ <productname>Postgres-XL</productname> interact will make this
+ chapter somewhat clearer.
+<!## end>
</para>
<!## XC>
@@ -124,51 +161,117 @@
Datanode. GTM is responsible to provide ACID property of
transactions. Datanode stores table data and handle SQL statements
locally. Coordinator handles each SQL statements from
- applications, determines which Datanode to go, and decomposes it
- into local SQL statements for each Datanode.
+ applications, determines which datanode to go, and decomposes it
+ into local SQL statements for each datanode.
</para>
<para>
You should run GTM in a separate server because GTM has to take
- care of transaction requirements from all the Coordinators and
- Datanodes. To group multiple requirements and responses from
- Coordinator and Datanode running on the same server, you can
+ care of transaction requirements from all the coordinators and
+ datanodes. To group multiple requirements and responses from
+ coordinator and datanode running on the same server, you can
configure GTM-Proxy. GTM-Proxy reduces the number of interaction
and the amount of data to GTM. GTM-Proxy also helps to take care
of GTM failure.
</para>
<para>
- It is a good convention to run both Coordinator and Datanode in a
+ It is a good convention to run both coordinator and datanode in a
same server because we don't have to worry about workload balance
between the two. You can have any number of servers where these
- two components are running. Because both Coordinator and Datanode
+ two components are running. Because both coordinator and datanode
are essentially PostgreSQL database, you should configure them to
avoid resource conflict. It is very important to assign them
different working directory and port number.
</para>
<para>
- Postgres-XC allow multiple Coordinators which accept statments
+ Postgres-XC allow multiple coordinators which accept statments
from applications independently but in an integrated way. Any
- writes from any Coordinator is available from any other
- Coordinators. They acts as if they are single database.
- Coordinator's role is to accept statments, find what Datanodes are
- involved, Ode-compose incoming statements for each Datanode if
- needed, proxy statements to target Datanode, collect the results
+ writes from any coordinator is available from any other
+ coordinators. They acts as if they are single database.
+ Coordinator's role is to accept statments, find what datanodes are
+ involved, Ode-compose incoming statements for each datanode if
+ needed, proxy statements to target datanode, collect the results
and write them back to applications.
</para>
<para>
Coordinator does not store any user data. It stores only catalog
data to determine how to decompose the statement, where the target
+ datanodes are, among others. Therefore, you don't have to worry
+ about coordinator failure much. When the coordinator fails, you
+ can just switch to the other one.
+ </para>
+
+ <para>
+ GTM could be single point of failure (SPOF). To prevent this, you
+ can run another GTM as GTM-Standby to backup GTM's status. When
+ GTM fails, GTM-Proxy can switch to the standby on the fly. This
+ will be described in detail in high-availability sections.
+ </para>
+<!## end>
+<!## XL>
+ <para>
+ <productname>Postgres-XL</>, in short, is a collection
+ of <productname>PostgreSQL</> database clusters which act as if the whole
+ collection is a single database cluster. Based on your database design,
+ each table is replicated or distributed among member databases.
+ </para>
+
+ <para>
+ To provide this capability, <productname>Postgres-XL</> is
+ composed of three major components called the GTM, Coordinator and
+ Datanode. The GTM is responsible to provide ACID property of
+ transactions. The Datanode stores table data and handle SQL statements
+ locally. The Coordinator handles each SQL statements from
+ applications, determines which Datanode to go, and sends plans on
+ to the appropriate Datanodes.
+ </para>
+
+ <para>
+ You usually should run GTM on a separate server because GTM has to take
+ care of transaction requirements from all the Coordinators and
+ Datanodes. To group multiple requests and responses from
+ Coordinator and Datanode processes running on the same server, you can
+ configure GTM-Proxy. GTM-Proxy reduces the number of interactions
+ and the amount of data to GTM. GTM-Proxy also helps handle
+ GTM failures.
+ </para>
+
+ <para>
+ It is often good practice to run both Coordinator and Datanode on the
+ same server because we don't have to worry about workload balance
+ between the two, and you can often get at data from replicated tables locally
+ without sending an additional request out on the network.
+ You can have any number of servers where these
+ two components are running. Because both Coordinator and Datanode
+ are essentially PostgreSQL instances, you should configure them to
+ avoid resource conflict. It is very important to assign them
+ different working directories and port numbers.
+ </para>
+
+ <para>
+ Postgres-XL allows multiple Coordinators to accept statements
+ from applications independently but in an integrated way. Any
+ writes from any Coordinator is available from any other
+ Coordinators. They acts as if they are single database.
+ The Coordinator's role is to accept statements, find what Datanodes are
+ involved, send query plans on to the appropriate Datanodes if
+ needed, collect the results
+ and write them back to applications.
+ </para>
+
+ <para>
+ The Coordinator does not store any user data. It stores only catalog
+ data to determine how to process statements, where the target
Datanodes are, among others. Therefore, you don't have to worry
about Coordinator failure much. When the Coordinator fails, you
can just switch to the other one.
</para>
<para>
- GTM could be single point of failure (SPOF). To prevent this, you
+ The GTM could be single point of failure (SPOF). To prevent this, you
can run another GTM as GTM-Standby to backup GTM's status. When
GTM fails, GTM-Proxy can switch to the standby on the fly. This
will be described in detail in high-availability sections.
@@ -182,13 +285,21 @@
(programs):
<!## end>
<!## XC>
- As described above, Coordinator and Datanode
+ As described above, coordinator and datanode
of <productname>Postgres-XC</> are
essentially <productname>PostgreSQL</> database servers. In database
jargon, <productname>PostgreSQL</productname> uses a client/server
model. A <productname>PostgreSQL</productname> session consists
of the following cooperating processes (programs):
<!## end>
+<!## XL>
+ As described above, the Coordinators and Datanodes
+ of <productname>Postgres-XL</> are
+ essentially <productname>PostgreSQL</> database servers. In database
+ jargon, <productname>PostgreSQL</productname> uses a client/server
+ model. A <productname>PostgreSQL</productname> session consists
+ of the following cooperating processes (programs):
+<!## end>
&common;
@@ -218,6 +329,9 @@
<!## XC>
<productname>Postgres-XC</productname> distribution; most are
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> distribution; most are
+<!## end>
developed by users.
</para>
</listitem>
@@ -259,6 +373,18 @@
come and go. (All of this is of course invisible to the user. We
only mention it here for completeness.)
<!## end>
+<!## XL>
+ The <productname>Postgres-XL</> can handle
+ multiple concurrent connections from clients. To achieve this it
+ starts (<quote>forks</quote>) a new process for each connection.
+ From that point on, the client and the new server process
+ communicate without intervention by the original
+ <filename>postgres</filename> process. Thus, the
+ master server process is always running, waiting for
+ client connections, whereas client and associated server processes
+ come and go. (All of this is of course invisible to the user. We
+ only mention it here for completeness.)
+<!## end>
</para>
</sect1>
@@ -287,7 +413,14 @@
<!## XC>
The first test to see whether you can access the database server
is to try to create a database. Running
- <productname>Postgres-XC</productname> servers (Coordinators and Datanodes) can manage many
+ <productname>Postgres-XC</productname> servers (coordinators and datanodes) can manage many
+ databases. Typically, a separate database is used for each
+ project or for each user.
+<!## end>
+<!## XL>
+ The first test to see whether you can access the database server
+ is to try to create a database. Running
+ <productname>Postgres-XL</productname> servers (coordinators and datanodes) can manage many
databases. Typically, a separate database is used for each
project or for each user.
<!## end>
@@ -322,6 +455,9 @@ createdb: command not found
<!## XC>
then <productname>Postgres-XC</> was not installed properly. Either it was not
<!## end>
+<!## XL>
+ then <productname>Postgres-XL</> was not installed properly. Either it was not
+<!## end>
installed at all or your shell's search path was not set to include it.
Try calling the command with an absolute path instead:
<screen>
@@ -378,11 +514,28 @@ createdb: could not connect to database postgres: FATAL: role "joe" does not ex
switch or set the <envar>PGUSER</> environment variable to specify your
<productname>Postgres-XC</> user name.
<!## end>
+<!## XL>
+ where your own login name is mentioned. This will happen if the
+ administrator has not created a <productname>Postgres-XL</> user account
+ for you. (<productname>Postgres-XL</> user accounts are distinct from
+ operating system user accounts.) If you are the administrator, see
+ <xref linkend="user-manag"> for help creating accounts. You will need to
+ become the operating system user under which <productname>Postgres-XL</>
+ was installed (usually <literal>postgres</>) to create the first user
+ account. It could also be that you were assigned a
+ <productname>Postgres-XL</> user name that is different from your
+ operating system user name; in that case you need to use the <option>-U</>
+ switch or set the <envar>PGUSER</> environment variable to specify your
+ <productname>Postgres-XL</> user name.
+<!## end>
</para>
<!## XC>
&xconly;
<!## end>
+<!## XL>
+&xlonly;
+<!## end>
<para>
If you have a user account but it does not have the privileges required to
create a database, you will see the following:
@@ -407,6 +560,15 @@ createdb: database creation failed: ERROR: permission denied to create database
yourself then you should log in for the purposes of this tutorial
under the user account that you started the server as.
<!## end>
+<!## XL>
+ Not every user has authorization to create new databases. If
+ <productname>Postgres-XL</productname> refuses to create databases
+ for you then the site administrator needs to grant you permission
+ to create databases. Consult your site administrator if this
+ occurs. If you installed <productname>Postgres-XL</productname>
+ yourself then you should log in for the purposes of this tutorial
+ under the user account that you started the server as.
+<!## end>
<!## XC>
Or you may have error message like:
@@ -414,7 +576,23 @@ createdb: database creation failed: ERROR: permission denied to create database
createdb: database creation failed: ERROR: source database "template1" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
</screen>
- This means that at least one of the Coordinator pooler still holds a connection to template1 database to one of the Datanodes. To release them, you should do the following as the database superuser.
+ This means that at least one of the Coordinator poolers still holds a connection to template1 database to one of the datanodes. To release them, you should do the following as the database superuser.
+<screen>
+<prompt>$</prompt> <userinput>psql</userinput>
+...
+<prompt>koichi=#</prompt> <userinput>CLEAN CONNECTION TO ALL FOR template1;</userinput>
+CLEAN CONNECTION
+<prompt>koichi=#</prompt>
+</screen>
+ </para>
+<!## end>
+<!## XL>
+ Or you may have error message like:
+<screen>
+createdb: database creation failed: ERROR: source database "template1" is being accessed by other users
+DETAIL: There are 1 other session(s) using the database.
+</screen>
+ This means that at least one of the Coordinator poolers still holds a connection to template1 database to one of the datanodes. To release them, you should do the following as the database superuser.
<screen>
<prompt>$</prompt> <userinput>psql</userinput>
...
@@ -459,6 +637,21 @@ CLEAN CONNECTION
also specify the <option>-U</option> option everywhere to select
a <productname>Postgres-XC</productname> user name to connect as.
<!## end>
+<!## XL>
+ As an explanation for why this works:
+ <productname>Postgres-XL</productname> user names are separate
+ from operating system user accounts. When you connect to a
+ database, you can choose what
+ <productname>Postgres-XL</productname> user name to connect as;
+ if you don't, it will default to the same name as your current
+ operating system account. As it happens, there will always be a
+ <productname>Postgres-XL</productname> user account that has the
+ same name as the operating system user that started the server,
+ and it also happens that that user always has permission to
+ create databases. Instead of logging in as that user you can
+ also specify the <option>-U</option> option everywhere to select
+ a <productname>Postgres-XL</productname> user name to connect as.
+<!## end>
</para>
</footnote>
</para>
@@ -485,6 +678,16 @@ CLEAN CONNECTION
name as the default, so it can save you some typing. To create
that database, simply type:
<!## end>
+<!## XL>
+ You can also create databases with other names.
+ <productname>Postgres-XL</productname> allows you to create any
+ number of databases at a given site. Database names must have an
+ alphabetic first character and are limited to 63 characters in
+ length. A convenient choice is to create a database with the same
+ name as your current user name. Many tools assume that database
+ name as the default, so it can save you some typing. To create
+ that database, simply type:
+<!## end>
<screen>
<prompt>$</prompt> <userinput>createdb</userinput>
</screen>
@@ -538,6 +741,12 @@ CLEAN CONNECTION
to interactively enter, edit, and execute
<acronym>SQL</acronym> commands.
<!## end>
+<!## XL>
+ Running the <productname>Postgres-XL</productname> interactive
+ terminal program, called <application><firstterm>psql</></application>, which allows you
+ to interactively enter, edit, and execute
+ <acronym>SQL</acronym> commands.
+<!## end>
</para>
</listitem>
@@ -599,6 +808,13 @@ mydb=#
access controls. For the purposes of this tutorial that is not
important.
<!## end>
+<!## XL>
+ That would mean you are a database superuser, which is most likely
+ the case if you installed <productname>Postgres-XL</productname>
+ yourself. Being a superuser means that you are not subject to
+ access controls. For the purposes of this tutorial that is not
+ important.
+<!## end>
</para>
<para>
@@ -649,6 +865,9 @@ mydb=#
<!## XC>
<acronym>SQL</acronym>
<!## end>
+<!## XL>
+ <acronym>SQL</acronym>
+<!## end>
commands by typing:
<screen>
<prompt>mydb=&gt;</prompt> <userinput>\h</userinput>
diff --git a/doc-xc/src/sgml/syntax.sgmlin b/doc-xc/src/sgml/syntax.sgmlin
index 9e596a69c6..72472d5d5f 100644
--- a/doc-xc/src/sgml/syntax.sgmlin
+++ b/doc-xc/src/sgml/syntax.sgmlin
@@ -268,6 +268,9 @@ U&amp;"d!0061t!+000061" UESCAPE '!'
<!## XC>
<productname>Postgres-XC</productname>, but
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, but
+<!## end>
<literal>"Foo"</literal> and <literal>"FOO"</literal> are
different from these three and each other. (The folding of
<!## PG>
@@ -276,6 +279,9 @@ U&amp;"d!0061t!+000061" UESCAPE '!'
<!## XC>
unquoted names to lower case in <productname>Postgres-XC</> is
<!## end>
+<!## XL>
+ unquoted names to lower case in <productname>Postgres-XL</> is
+<!## end>
incompatible with the SQL standard, which says that unquoted names
should be folded to upper case. Thus, <literal>foo</literal>
should be equivalent to <literal>"FOO"</literal> not
@@ -301,6 +307,9 @@ U&amp;"d!0061t!+000061" UESCAPE '!'
<!## XC>
constants</firstterm> in <productname>Postgres-XC</productname>:
<!## end>
+<!## XL>
+ constants</firstterm> in <productname>Postgres-XL</productname>:
+<!## end>
strings, bit strings, and numbers.
Constants can also be specified with explicit types, which can
enable more accurate representation and more efficient handling by
@@ -355,6 +364,9 @@ SELECT 'foo' 'bar';
<!## XC>
by <acronym>SQL</acronym>; <productname>Postgres-XC</productname> is
<!## end>
+<!## XL>
+ by <acronym>SQL</acronym>; <productname>Postgres-XL</productname> is
+<!## end>
following the standard.)
</para>
</sect3>
@@ -376,6 +388,9 @@ SELECT 'foo' 'bar';
<!## XC>
<productname>Postgres-XC</productname> also accepts <quote>escape</>
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also accepts <quote>escape</>
+<!## end>
string constants, which are an extension to the SQL standard.
An escape string constant is specified by writing the letter
<literal>E</literal> (upper or lower case) just before the opening single
@@ -490,6 +505,9 @@ SELECT 'foo' 'bar';
<!## XC>
then <productname>Postgres-XC</productname> recognizes backslash escapes
<!## end>
+<!## XL>
+ then <productname>Postgres-XL</productname> recognizes backslash escapes
+<!## end>
in both regular and escape string constants. However, as of
<productname>PostgreSQL</> 9.1, the default is <literal>on</>, meaning
that backslash escapes are recognized only in escape string constants.
@@ -529,6 +547,9 @@ SELECT 'foo' 'bar';
<!## XC>
<productname>Postgres-XC</productname> also supports another type
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also supports another type
+<!## end>
of escape syntax for strings that allows specifying arbitrary
Unicode characters by code point. A Unicode escape string
constant starts with <literal>U&amp;</literal> (upper or lower case
@@ -613,6 +634,9 @@ U&amp;'d!0061t!+000061' UESCAPE '!'
<!## XC>
<productname>Postgres-XC</productname> provides another way, called
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides another way, called
+<!## end>
<quote>dollar quoting</quote>, to write string constants.
A dollar-quoted string constant
consists of a dollar sign (<literal>$</literal>), an optional
@@ -654,6 +678,9 @@ $function$
<!## XC>
<productname>Postgres-XC</>. But since the sequence does not match
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>. But since the sequence does not match
+<!## end>
the outer dollar quoting delimiter <literal>$function$</>, it is
just some more characters within the constant so far as the outer
string is concerned.
@@ -853,6 +880,9 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<!## XC>
for a few data types, but <productname>Postgres-XC</productname> allows it
<!## end>
+<!## XL>
+ for a few data types, but <productname>Postgres-XL</productname> allows it
+<!## end>
for all types. The syntax with
<!## PG>
<literal>::</literal> is historical <productname>PostgreSQL</productname>
@@ -860,6 +890,9 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<!## XC>
<literal>::</literal> is historical <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <literal>::</literal> is historical <productname>Postgres-XL</productname>
+<!## end>
usage, as is the function-call syntax.
</para>
</sect3>
@@ -906,6 +939,9 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<!## XC>
<productname>Postgres-XC</productname> to parse SQL-compliant
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> to parse SQL-compliant
+<!## end>
queries without requiring spaces between tokens.
</para>
</listitem>
@@ -924,6 +960,9 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<!## XC>
<productname>Postgres-XC</productname> reads it as two operator names
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> reads it as two operator names
+<!## end>
not one.
</para>
</sect2>
@@ -1066,6 +1105,9 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<!## XC>
associativity of the operators in <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ associativity of the operators in <productname>Postgres-XL</>.
+<!## end>
Most operators have the same precedence and are left-associative.
The precedence and associativity of the operators is hard-wired
into the parser. This can lead to non-intuitive behavior; for
@@ -1119,6 +1161,9 @@ SELECT (5 !) - 6;
<!## XC>
<entry><productname>Postgres-XC</productname>-style typecast</entry>
<!## end>
+<!## XL>
+ <entry><productname>Postgres-XL</productname>-style typecast</entry>
+<!## end>
</row>
<row>
@@ -1754,6 +1799,9 @@ SELECT string_agg(a ORDER BY a, ',') FROM table; -- incorrect
<!## XC>
in an aggregate function is a <productname>Postgres-XC</> extension.
<!## end>
+<!## XL>
+ in an aggregate function is a <productname>Postgres-XL</> extension.
+<!## end>
</para>
</note>
@@ -1952,6 +2000,9 @@ UNBOUNDED FOLLOWING
<!## XC>
<productname>Postgres-XC</productname> accepts two equivalent syntaxes
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> accepts two equivalent syntaxes
+<!## end>
for type casts:
<synopsis>
CAST ( <replaceable>expression</replaceable> AS <replaceable>type</replaceable> )
@@ -1964,6 +2015,9 @@ CAST ( <replaceable>expression</replaceable> AS <replaceable>type</replaceable>
<!## XC>
<literal>::</literal> is historical <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ <literal>::</literal> is historical <productname>Postgres-XL</productname>
+<!## end>
usage.
</para>
@@ -2436,6 +2490,9 @@ SELECT ... WHERE CASE WHEN x &gt; 0 THEN y/x &gt; 1.5 ELSE false END;
<!## XC>
<productname>Postgres-XC</productname> allows functions that have named
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows functions that have named
+<!## end>
parameters to be called using either <firstterm>positional</firstterm> or
<firstterm>named</firstterm> notation. Named notation is especially
useful for functions that have a large number of parameters, since it
@@ -2462,6 +2519,9 @@ SELECT ... WHERE CASE WHEN x &gt; 0 THEN y/x &gt; 1.5 ELSE false END;
<!## XC>
<productname>Postgres-XC</productname> also supports
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also supports
+<!## end>
<firstterm>mixed</firstterm> notation, which combines positional and
named notation. In this case, positional parameters are written first
and named parameters appear after them.
@@ -2510,6 +2570,9 @@ LANGUAGE SQL IMMUTABLE STRICT;
<!## XC>
to functions in <productname>Postgres-XC</productname>. An example is:
<!## end>
+<!## XL>
+ to functions in <productname>Postgres-XL</productname>. An example is:
+<!## end>
<screen>
SELECT concat_lower_or_upper('Hello', 'World', true);
concat_lower_or_upper
diff --git a/doc-xc/src/sgml/textsearch.sgmlin b/doc-xc/src/sgml/textsearch.sgmlin
index 1680781374..c6e1ea411d 100644
--- a/doc-xc/src/sgml/textsearch.sgmlin
+++ b/doc-xc/src/sgml/textsearch.sgmlin
@@ -38,6 +38,9 @@
<!## XC>
<productname>Postgres-XC</productname> has
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> has
+<!## end>
<literal>~</literal>, <literal>~*</literal>, <literal>LIKE</literal>, and
<literal>ILIKE</literal> operators for textual data types, but they lack
many essential properties required by modern information systems:
@@ -92,6 +95,9 @@
<!## XC>
<productname>Postgres-XC</productname> uses a <firstterm>parser</> to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> uses a <firstterm>parser</> to
+<!## end>
perform this step. A standard parser is provided, and custom parsers
can be created for specific needs.
</para>
@@ -117,6 +123,9 @@
<!## XC>
<productname>Postgres-XC</productname> uses <firstterm>dictionaries</> to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> uses <firstterm>dictionaries</> to
+<!## end>
perform this step. Various standard dictionaries are provided, and
custom ones can be created for specific needs.
</para>
@@ -209,6 +218,9 @@
<!## XC>
For searches within <productname>Postgres-XC</productname>,
<!## end>
+<!## XL>
+ For searches within <productname>Postgres-XL</productname>,
+<!## end>
a document is normally a textual field within a row of a database table,
or possibly a combination (concatenation) of such fields, perhaps stored
in several tables or obtained dynamically. In other words, a document can
@@ -247,6 +259,9 @@ WHERE mid = did AND mid = 12;
<!## XC>
the data inside <productname>Postgres-XC</productname>. Also, keeping
<!## end>
+<!## XL>
+ the data inside <productname>Postgres-XL</productname>. Also, keeping
+<!## end>
everything inside the database allows easy access
to document metadata to assist in indexing and display.
</para>
@@ -273,6 +288,9 @@ WHERE mid = did AND mid = 12;
<!## XC>
Full text searching in <productname>Postgres-XC</productname> is based on
<!## end>
+<!## XL>
+ Full text searching in <productname>Postgres-XL</productname> is based on
+<!## end>
the match operator <literal>@@</literal>, which returns
<literal>true</literal> if a <type>tsvector</type>
(document) matches a <type>tsquery</type> (query).
@@ -363,6 +381,9 @@ text @@ text
<!## XC>
configurations</>. <productname>Postgres-XC</> comes with predefined
<!## end>
+<!## XL>
+ configurations</>. <productname>Postgres-XL</> comes with predefined
+<!## end>
configurations for many languages, and you can easily create your own
configurations. (<application>psql</>'s <command>\dF</> command
shows all available configurations.)
@@ -395,6 +416,9 @@ text @@ text
<!## XC>
<productname>Postgres-XC</>'s text search facility provides
<!## end>
+<!## XL>
+ <productname>Postgres-XL</>'s text search facility provides
+<!## end>
four types of configuration-related database objects:
</para>
@@ -440,6 +464,9 @@ text @@ text
<!## XC>
<productname>Postgres-XC</> distribution.) Since dictionaries and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> distribution.) Since dictionaries and
+<!## end>
configurations just parameterize and connect together some underlying
parsers and templates, no special privilege is needed to create a new
dictionary or configuration. Examples of creating custom dictionaries and
@@ -649,6 +676,9 @@ LIMIT 10;
<!## XC>
<productname>Postgres-XC</productname> provides support for all of these
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides support for all of these
+<!## end>
functions.
</para>
@@ -662,6 +692,9 @@ LIMIT 10;
<!## XC>
<productname>Postgres-XC</productname> provides the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides the
+<!## end>
function <function>to_tsvector</function> for converting a document to
the <type>tsvector</type> data type.
</para>
@@ -771,6 +804,9 @@ UPDATE tt SET ti =
<!## XC>
<productname>Postgres-XC</productname> provides the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides the
+<!## end>
functions <function>to_tsquery</function> and
<function>plainto_tsquery</function> for converting a query to
the <type>tsquery</type> data type. <function>to_tsquery</function>
@@ -903,6 +939,9 @@ SELECT plainto_tsquery('english', 'The Fat &amp; Rats:C');
<!## XC>
shown first. <productname>Postgres-XC</productname> provides two
<!## end>
+<!## XL>
+ shown first. <productname>Postgres-XL</productname> provides two
+<!## end>
predefined ranking functions, which take into account lexical, proximity,
and structural information; that is, they consider how often the query
terms appear in the document, how close together the terms are in the
@@ -1127,6 +1166,9 @@ LIMIT 10;
<!## XC>
the document with marked search terms. <productname>Postgres-XC</>
<!## end>
+<!## XL>
+ the document with marked search terms. <productname>Postgres-XL</>
+<!## end>
provides a function <function>ts_headline</function> that
implements this functionality.
</para>
@@ -1290,6 +1332,9 @@ FROM (SELECT id, body, q, ts_rank_cd(ti, q) AS rank
<!## XC>
<productname>Postgres-XC</productname> also provides functions and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also provides functions and
+<!## end>
operators that can be used to manipulate documents that are already
in <type>tsvector</> form.
</para>
@@ -1425,6 +1470,9 @@ strip(<replaceable class="PARAMETER">vector</replaceable> <type>tsvector</>) ret
<!## XC>
<productname>Postgres-XC</productname> also provides functions and
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> also provides functions and
+<!## end>
operators that can be used to manipulate queries that are already
in <type>tsquery</> form.
</para>
@@ -1880,6 +1928,9 @@ LIMIT 10;
<!## XC>
for custom dictionaries. At present <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ for custom dictionaries. At present <productname>Postgres-XL</productname>
+<!## end>
provides just one built-in parser, which has been found to be useful for a
wide range of applications.
</para>
@@ -1939,6 +1990,9 @@ LIMIT 10;
<!## XC>
<entry><literal>postgres-XC</literal> in the context <literal>postgresql-beta1</literal></entry>
<!## end>
+<!## XL>
+ <entry><literal>postgres-XL</literal> in the context <literal>postgresql-beta1</literal></entry>
+<!## end>
</row>
<row>
<entry><literal>hword_part</></entry>
@@ -1956,6 +2010,9 @@ LIMIT 10;
<!## XC>
<literal>postgres-XC-beta1</literal></entry>
<!## end>
+<!## XL>
+ <literal>postgres-XL-beta1</literal></entry>
+<!## end>
</row>
<row>
<entry><literal>email</></entry>
@@ -2189,6 +2246,9 @@ SELECT alias, description, token FROM ts_debug('http://example.com/stuff/index.h
<!## XC>
<productname>Postgres-XC</productname> provides predefined dictionaries for
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides predefined dictionaries for
+<!## end>
many languages. There are also several predefined templates that can be
used to create new dictionaries with custom parameters. Each predefined
dictionary template is described below. If no existing
@@ -2199,6 +2259,9 @@ SELECT alias, description, token FROM ts_debug('http://example.com/stuff/index.h
<!## XC>
<filename>contrib/</> area of the <productname>Postgres-XC</> distribution
<!## end>
+<!## XL>
+ <filename>contrib/</> area of the <productname>Postgres-XL</> distribution
+<!## end>
for examples.
</para>
@@ -2321,12 +2384,18 @@ CREATE TEXT SEARCH DICTIONARY public.simple_dict (
<!## XC>
<productname>Postgres-XC</productname> installation's shared-data directory,
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> installation's shared-data directory,
+<!## end>
<!## PG>
often <filename>/usr/local/share/postgresql</> (use <command>pg_config
<!## end>
<!## XC>
often <filename>/usr/local/share/postgres-XC</> (use <command>pg_config
<!## end>
+<!## XL>
+ often <filename>/usr/local/share/postgres-XL</> (use <command>pg_config
+<!## end>
--sharedir</> to determine it if you're not sure).
The file format is simply a list
of words, one per line. Blank lines and trailing spaces are ignored,
@@ -2449,6 +2518,9 @@ SELECT * FROM ts_debug('english', 'Paris');
<!## XC>
<productname>Postgres-XC</> installation's shared-data directory).
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> installation's shared-data directory).
+<!## end>
The file format is just one line
per word to be substituted, with the word followed by its synonym,
separated by white space. Blank lines and trailing spaces are ignored.
@@ -2538,6 +2610,9 @@ mydb=# SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst','indices')
<!## XC>
as well. <productname>Postgres-XC</>'s current implementation of the
<!## end>
+<!## XL>
+ as well. <productname>Postgres-XL</>'s current implementation of the
+<!## end>
thesaurus dictionary is an extension of the synonym dictionary with added
<firstterm>phrase</firstterm> support. A thesaurus dictionary requires
a configuration file of the following format:
@@ -2757,6 +2832,9 @@ SELECT plainto_tsquery('supernova star');
<!## XC>
The standard <productname>Postgres-XC</productname> distribution does
<!## end>
+<!## XL>
+ The standard <productname>Postgres-XL</productname> distribution does
+<!## end>
not include any <application>Ispell</> configuration files.
Dictionaries for a large number of languages are available from <ulink
url="http://ficus-www.cs.ucla.edu/geoff/ispell.html">Ispell</ulink>.
@@ -2827,6 +2905,9 @@ SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk');
<!## XC>
present, <productname>Postgres-XC</productname> implements only the basic
<!## end>
+<!## XL>
+ present, <productname>Postgres-XL</productname> implements only the basic
+<!## end>
compound word operations of Hunspell.
</para>
</note>
@@ -2852,6 +2933,9 @@ SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk');
<!## XC>
(<productname>Postgres-XC</productname>'s standard stopword lists are also
<!## end>
+<!## XL>
+ (<productname>Postgres-XL</productname>'s standard stopword lists are also
+<!## end>
provided by the Snowball project.)
For example, there is a built-in definition equivalent to
@@ -2922,6 +3006,9 @@ CREATE TEXT SEARCH CONFIGURATION public.pg ( COPY = pg_catalog.english );
<!## XC>
We will use a Postgres-XC-specific synonym list
<!## end>
+<!## XL>
+ We will use a Postgres-XL-specific synonym list
+<!## end>
and store it in <filename>$SHAREDIR/tsearch_data/pg_dict.syn</filename>.
The file contents look like:
@@ -2982,6 +3069,9 @@ PostgreSQL, the highly scalable, SQL compliant, open source object-relational
<!## XC>
Postgres-XC, the highly scalable, SQL compliant, open source object-relational
<!## end>
+<!## XL>
+Postgres-XL, the highly scalable, SQL compliant, open source object-relational
+<!## end>
database management system, is now undergoing beta testing of the next
version of our software.
');
@@ -3445,6 +3535,9 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
<!## XC>
(<productname>Postgres-XC</productname> does this automatically when needed.)
<!## end>
+<!## XL>
+ (<productname>Postgres-XL</productname> does this automatically when needed.)
+<!## end>
GiST indexes are lossy because each document is represented in the
index by a fixed-length signature. The signature is generated by hashing
each word into a single bit in an n-bit string, with all these bits OR-ed
@@ -3728,6 +3821,9 @@ Parser: "pg_catalog.default"
<!## XC>
The current limitations of <productname>Postgres-XC</productname>'s
<!## end>
+<!## XL>
+ The current limitations of <productname>Postgres-XL</productname>'s
+<!## end>
text search features are:
<itemizedlist spacing="compact" mark="bullet">
<listitem>
@@ -3771,6 +3867,9 @@ Parser: "pg_catalog.default"
<!## XC>
Another example &mdash; the <productname>Postgres-XC</productname> mailing
<!## end>
+<!## XL>
+ Another example &mdash; the <productname>Postgres-XL</productname> mailing
+<!## end>
list archives contained 910,989 unique words with 57,491,343 lexemes in
461,020 messages.
</para>
diff --git a/doc-xc/src/sgml/trigger.sgmlin b/doc-xc/src/sgml/trigger.sgmlin
index db776d80a0..b20b8fb6be 100644
--- a/doc-xc/src/sgml/trigger.sgmlin
+++ b/doc-xc/src/sgml/trigger.sgmlin
@@ -7,6 +7,20 @@
<primary>trigger</primary>
</indexterm>
+<!## XC>
+&xconly;
+ <para>
+ The trigger will be supported in the future. The document will be supported then.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Triggers are not currently supported, but will be in the future.
+ </para>
+<!## end>
+
+<!## PG>
<para>
This chapter provides general information about writing trigger functions.
Trigger functions can be written in most of the available procedural
@@ -26,10 +40,24 @@
It is not currently possible to write a trigger function in the
plain SQL function language.
</para>
+<!## end>
<sect1 id="trigger-definition">
<title>Overview of Trigger Behavior</title>
+<!## XC>
+&xconly;
+ <para>
+ The trigger will be supported in the future. The document will be supported then.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Triggers are not currently supported, but will be in the future.
+ </para>
+<!## end>
+<!## PG>
<para>
A trigger is a specification that the database should automatically
execute a particular function whenever a certain type of operation is
@@ -275,11 +303,27 @@
Statement-level triggers do not currently have any way to examine the
individual row(s) modified by the statement.
</para>
+<!## end>
</sect1>
<sect1 id="trigger-datachanges">
<title>Visibility of Data Changes</title>
+<!## XC>
+&xconly;
+ <para>
+ The trigger will be supported in the future. The document will be supported then.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Triggers are not currently supported, but will be in the future.
+ </para>
+<!## end>
+
+<!## PG>
+
<para>
If you execute SQL commands in your trigger function, and these
commands access the table that the trigger is for, then
@@ -351,6 +395,7 @@
<xref linkend="spi-visibility">. The example in <xref
linkend="trigger-example"> contains a demonstration of these rules.
</para>
+<!## end>
</sect1>
<sect1 id="trigger-interface">
@@ -361,6 +406,20 @@
<secondary>in C</secondary>
</indexterm>
+<!## XC>
+&xconly;
+ <para>
+ The trigger will be supported in the future. The document will be supported then.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Triggers are not currently supported, but will be in the future.
+ </para>
+<!## end>
+
+<!## PG>
<para>
This section describes the low-level details of the interface to a
trigger function. This information is only needed when writing
@@ -637,11 +696,26 @@ typedef struct Trigger
<structfield>tg_trigtuple</> or <structfield>tg_newtuple</>,
as appropriate, if you don't want to modify the row being operated on.
</para>
+<!## end>
</sect1>
<sect1 id="trigger-example">
<title>A Complete Trigger Example</title>
+<!## XC>
+&xconly;
+ <para>
+ The trigger will be supported in the future. The document will be supported then.
+ </para>
+<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Triggers are not currently supported, but will be in the future.
+ </para>
+<!## end>
+
+<!## PG>
<para>
Here is a very simple example of a trigger function written in C.
(Examples of triggers written in procedural languages can be found
@@ -836,5 +910,6 @@ DELETE 2
<filename>src/test/regress/regress.c</filename> and
in <xref linkend="contrib-spi">.
</para>
+<!## end>
</sect1>
</chapter>
diff --git a/doc-xc/src/sgml/typeconv.sgmlin b/doc-xc/src/sgml/typeconv.sgmlin
index dcb68ec056..df79e73dea 100644
--- a/doc-xc/src/sgml/typeconv.sgmlin
+++ b/doc-xc/src/sgml/typeconv.sgmlin
@@ -23,6 +23,12 @@ the mixing of different data types in the same expression.
<productname>Postgres-XC</productname> inherits extensive facilities for
evaluating mixed-type expressions from <productname>PostgreSQL</>.
<!## end>
+<!## XL>
+<acronym>SQL</acronym> statements can, intentionally or not, require
+the mixing of different data types in the same expression.
+<productname>Postgres-XL</productname> inherits extensive facilities for
+evaluating mixed-type expressions from <productname>PostgreSQL</>.
+<!## end>
</para>
<para>
@@ -34,6 +40,9 @@ However, implicit conversions done by <productname>PostgreSQL</productname>
<!## XC>
However, implicit conversions done by <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+However, implicit conversions done by <productname>Postgres-XL</productname>
+<!## end>
can affect the results of a query. When necessary, these results
can be tailored by using <emphasis>explicit</emphasis> type conversion.
</para>
@@ -53,6 +62,13 @@ Refer to the relevant sections in <xref linkend="datatype"> and <xref linkend="f
for more information on specific data types and allowed functions and
operators.
<!## end>
+<!## XL>
+This chapter introduces the <productname>Postgres-XL</productname>
+type conversion mechanisms and conventions inherited from <productname>PostgreSQL</>.
+Refer to the relevant sections in <xref linkend="datatype"> and <xref linkend="functions">
+for more information on specific data types and allowed functions and
+operators.
+<!## end>
</para>
<sect1 id="typeconv-overview">
@@ -82,6 +98,18 @@ heuristics. This allows the use of mixed-type expressions even with
user-defined types.
</para>
<!## end>
+<!## XL>
+<para>
+<acronym>SQL</acronym> is a strongly typed language. That is, every data item
+has an associated data type which determines its behavior and allowed usage.
+<productname>Postgres-XL</productname> has an extensible type system that is
+more general and flexible than other <acronym>SQL</acronym> implementations.
+Hence, most type conversion behavior in <productname>Postgres-XL</productname>
+is governed by general rules rather than by <foreignphrase>ad hoc</>
+heuristics. This allows the use of mixed-type expressions even with
+user-defined types.
+</para>
+<!## end>
<para>
<!## PG>
@@ -102,6 +130,15 @@ allows specifying type names with strings, and this mechanism can be used in
<productname>Postgres-XC</productname> to start the parser down the correct
path. For example, the query:
<!## end>
+<!## XL>
+The <productname>Postgres-XL</productname> scanner/parser divides lexical
+elements into five fundamental categories: integers, non-integer numbers,
+strings, identifiers, and key words. Constants of most non-numeric types are
+first classified as strings. The <acronym>SQL</acronym> language definition
+allows specifying type names with strings, and this mechanism can be used in
+<productname>Postgres-XL</productname> to start the parser down the correct
+path. For example, the query:
+<!## end>
<screen>
SELECT text 'Origin' AS "label", point '(0,0)' AS "value";
@@ -126,6 +163,9 @@ distinct type conversion rules in the <productname>PostgreSQL</productname>
<!## XC>
distinct type conversion rules in the <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+distinct type conversion rules in the <productname>Postgres-XL</productname>
+<!## end>
parser:
<variablelist>
@@ -154,6 +194,16 @@ to be called; the parser must select the right function based on the data
types of the supplied arguments.
</para>
<!## end>
+<!## XL>
+<para>
+Much of the <productname>Postgres-XL</productname> type system is built around a
+rich set of functions. Functions can have one or more arguments.
+Since <productname>Postgres-XL</productname> permits function
+overloading, the function name alone does not uniquely identify the function
+to be called; the parser must select the right function based on the data
+types of the supplied arguments.
+</para>
+<!## end>
</listitem>
</varlistentry>
<varlistentry>
@@ -179,6 +229,15 @@ be overloaded, so the same problem of selecting the right operator
exists.
</para>
<!## end>
+<!## XL>
+<para>
+<productname>Postgres-XL</productname> allows expressions with
+prefix and postfix unary (one-argument) operators,
+as well as binary (two-argument) operators. Like functions, operators can
+be overloaded, so the same problem of selecting the right operator
+exists.
+</para>
+<!## end>
</listitem>
</varlistentry>
<varlistentry>
@@ -495,6 +554,14 @@ entries is for type <type>float8</type>, which is the preferred type in
the numeric category. Therefore, <productname>Postgres-XC</productname>
will use that entry when faced with an <type>unknown</> input:
<!## end>
+<!## XL>
+The <productname>Postgres-XL</productname> operator catalog has several
+entries for the prefix operator <literal>@</>, all of which implement
+absolute-value operations for various numeric data types. One of these
+entries is for type <type>float8</type>, which is the preferred type in
+the numeric category. Therefore, <productname>Postgres-XL</productname>
+will use that entry when faced with an <type>unknown</> input:
+<!## end>
<screen>
SELECT @ '-4.5' AS "abs";
abs
diff --git a/doc-xc/src/sgml/unaccent.sgmlin b/doc-xc/src/sgml/unaccent.sgmlin
index c1fb25aeda..c8982d7b64 100644
--- a/doc-xc/src/sgml/unaccent.sgmlin
+++ b/doc-xc/src/sgml/unaccent.sgmlin
@@ -42,6 +42,9 @@
<!## XC>
the <productname>Postgres-XC</> installation's shared-data directory).
<!## end>
+<!## XL>
+ the <productname>Postgres-XL</> installation's shared-data directory).
+<!## end>
Its name must end in <literal>.rules</> (which is not to be included in
the <literal>RULES</> parameter).
</para>
diff --git a/doc-xc/src/sgml/user-manag.sgmlin b/doc-xc/src/sgml/user-manag.sgmlin
index 40e3525a4e..2f469945e3 100644
--- a/doc-xc/src/sgml/user-manag.sgmlin
+++ b/doc-xc/src/sgml/user-manag.sgmlin
@@ -12,6 +12,9 @@
<!## XC>
<productname>Postgres-XC</productname> manages database access permissions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> manages database access permissions
+<!## end>
using the concept of <firstterm>roles</>. A role can be thought of as
either a database user, or a group of database users, depending on how
the role is set up. Roles can own database objects (for example,
@@ -29,6 +32,9 @@
<!## XC>
<quote>groups</>. In <productname>Postgres-XC</productname> versions
<!## end>
+<!## XL>
+ <quote>groups</>. In <productname>Postgres-XL</productname> versions
+<!## end>
before 8.1, users and groups were distinct kinds of entities, but now
there are only roles. Any role can act as a user, a group, or both.
</para>
@@ -309,6 +315,9 @@ ALTER ROLE myname SET enable_indexscan TO off;
<!## XC>
revoked from, a group as a whole. In <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ revoked from, a group as a whole. In <productname>Postgres-XL</productname>
+<!## end>
this is done by creating a role that represents the group, and then
granting <firstterm>membership</> in the group role to individual user
roles.
@@ -403,6 +412,9 @@ RESET ROLE;
<!## XC>
behavior can be obtained in <productname>Postgres-XC</productname> by giving
<!## end>
+<!## XL>
+ behavior can be obtained in <productname>Postgres-XL</productname> by giving
+<!## end>
roles being used as SQL roles the <literal>INHERIT</> attribute, while
giving roles being used as SQL users the <literal>NOINHERIT</> attribute.
<!## PG>
@@ -411,6 +423,9 @@ RESET ROLE;
<!## XC>
However, <productname>Postgres-XC</productname> defaults to giving all roles
<!## end>
+<!## XL>
+ However, <productname>Postgres-XL</productname> defaults to giving all roles
+<!## end>
the <literal>INHERIT</> attribute, for backward compatibility with pre-8.1
releases in which users always had use of permissions granted to groups
they were members of.
@@ -472,6 +487,9 @@ DROP ROLE <replaceable>name</replaceable>;
<!## XC>
<productname>Postgres-XC</productname> allows only superusers to
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows only superusers to
+<!## end>
create functions written in those languages.
</para>
</sect1>
diff --git a/doc-xc/src/sgml/vacuumlo.sgmlin b/doc-xc/src/sgml/vacuumlo.sgmlin
index 075d3afb94..23662cd212 100644
--- a/doc-xc/src/sgml/vacuumlo.sgmlin
+++ b/doc-xc/src/sgml/vacuumlo.sgmlin
@@ -16,6 +16,15 @@
the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+
+ <para>
+ <application>vacuumlo</> is not supported
+ by <productname>Postgres-XL</> at present. This may be supported in
+ the future releases.
+ </para>
+<!## end>
<!## PG>
<para>
diff --git a/doc-xc/src/sgml/version.sgmlin b/doc-xc/src/sgml/version.sgmlin
new file mode 100644
index 0000000000..213d6a0fc4
--- /dev/null
+++ b/doc-xc/src/sgml/version.sgmlin
@@ -0,0 +1,2 @@
+<!entity version "9.2">
+<!entity majorversion "9.2">
diff --git a/doc-xc/src/sgml/wal.sgmlin b/doc-xc/src/sgml/wal.sgmlin
index 556b7bb49a..bd3ab6c564 100644
--- a/doc-xc/src/sgml/wal.sgmlin
+++ b/doc-xc/src/sgml/wal.sgmlin
@@ -22,6 +22,9 @@
<!## XC>
system, and <productname>Postgres-XC</> does everything possible to
<!## end>
+<!## XL>
+ system, and <productname>Postgres-XL</> does everything possible to
+<!## end>
guarantee reliable operation. One aspect of reliable operation is
that all data recorded by a committed transaction should be stored
in a nonvolatile area that is safe from power loss, operating
@@ -48,6 +51,9 @@
<!## XC>
the buffer cache to disk, and <productname>Postgres-XC</> uses those
<!## end>
+<!## XL>
+ the buffer cache to disk, and <productname>Postgres-XL</> uses those
+<!## end>
features. (See the <xref linkend="guc-wal-sync-method"> parameter
to adjust how this is done.)
</para>
@@ -143,6 +149,9 @@
<!## XC>
accessible to <productname>Postgres-XC</>, but some file systems
<!## end>
+<!## XL>
+ accessible to <productname>Postgres-XL</>, but some file systems
+<!## end>
(e.g., <acronym>ZFS</>, <acronym>ext4</>) can use them to flush
data to the platters on write-back-enabled drives. Unfortunately, such
file systems behave suboptimally when combined with battery-backup unit
@@ -185,6 +194,9 @@
<!## XC>
of 512 bytes (<productname>Postgres-XC</> typically writes 8192 bytes, or
<!## end>
+<!## XL>
+ of 512 bytes (<productname>Postgres-XL</> typically writes 8192 bytes, or
+<!## end>
16 sectors, at a time), and the process of writing could fail due
to power loss at any time, meaning some of the 512-byte sectors were
written while others were not. To guard against such failures,
@@ -198,6 +210,11 @@
permanent WAL storage <emphasis>before</> modifying the actual page on
disk. By doing this, during crash recovery <productname>Postgres-XC</> can
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> periodically writes full page images to
+ permanent WAL storage <emphasis>before</> modifying the actual page on
+ disk. By doing this, during crash recovery <productname>Postgres-XL</> can
+<!## end>
restore partially-written pages from WAL. If you have file-system software
that prevents partial page writes (e.g., ZFS), you can turn off
this page imaging by turning off the <xref
@@ -399,6 +416,12 @@
crash (that is, a hardware or operating system crash, not a failure of
<productname>Postgres-XC</> itself) could result in arbitrarily bad
<!## end>
+<!## XL>
+ all logic within <productname>Postgres-XL</> that attempts to synchronize
+ writes to different portions of the database, and therefore a system
+ crash (that is, a hardware or operating system crash, not a failure of
+ <productname>Postgres-XL</> itself) could result in arbitrarily bad
+<!## end>
corruption of the database state. In many scenarios, asynchronous
commit provides most of the performance improvement that could be
obtained by turning off <varname>fsync</varname>, but without the risk
@@ -517,6 +540,9 @@
<!## XC>
<productname>Postgres-XC</> can be expected to complete each checkpoint
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> can be expected to complete each checkpoint
+<!## end>
in about half the time before the next checkpoint starts. On a system
that's very close to maximum I/O throughput during normal operation,
you might want to increase <varname>checkpoint_completion_target</varname>
@@ -618,6 +644,9 @@
<!## XC>
<productname>Postgres-XC</productname> will ask the kernel to force
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will ask the kernel to force
+<!## end>
<acronym>WAL</acronym> updates out to disk.
All the options should be the same in terms of reliability, with
the exception of <literal>fsync_writethrough</>, which can sometimes
@@ -637,6 +666,9 @@
<!## XC>
(provided that <productname>Postgres-XC</productname> has been
<!## end>
+<!## XL>
+ (provided that <productname>Postgres-XL</productname> has been
+<!## end>
compiled with support for it) will result in each
<function>LogInsert</function> and <function>LogFlush</function>
<acronym>WAL</acronym> call being logged to the server log. This
@@ -694,6 +726,9 @@
<!## XC>
that disks holding <productname>Postgres-XC</productname>'s
<!## end>
+<!## XL>
+ that disks holding <productname>Postgres-XL</productname>'s
+<!## end>
<acronym>WAL</acronym> log files do not make such false reports.
(See <xref linkend="wal-reliability">.)
</para>
@@ -796,5 +831,75 @@
</para>
</sect1>
<!## end>
+<!## XL>
+
+ <sect1 id="barriers">
+ <title>Barrier</title>
+&xlonly;
+ <para>
+ Its important to ensure that any global transactions in the cluster
+ must either be committed on all the nodes or none of the nodes. If
+ global recovery is done in a way such that on one node the
+ <acronym>WAL</acronym> recovery stops after a commit record of some
+ global transaction is processed, but stops before the commit record for
+ the same transaction is processed on some other node, the cluster may
+ be left in an inconsistent state. Since the commit messages of global
+ transactions can arrive out-of-order on different nodes, its very hard
+ to find a common synchronization point. For example, for two global
+ transactions T1 and T2, the commit messages for these transactions
+ can arrive on nodes N1 and N2 such that N1 receives commit message
+ for T1 first and N2 receives commit message T2 first. In this case,
+ during <acronym>PITR</acronym>, irrespective of whether we stop at
+ T1 or T2, the cluster would lose its consistency since at least one
+ transaction will be marked as committed on one node and as aborted
+ on the other node.
+ </para>
+
+ <para>
+ During recovery, it can be hard and even impossible to find
+ cluster-wide consistent synchronization points. In fact, such
+ synchronization points may not exists at all. Postgres-XL provides
+ a mechanism to create such synchronization points, called barriers,
+ during normal operation. A barrier can be created by using a SQL
+ command <command>BARRIER</command>
+ </para>
+
+ <para>
+ The user must connect to one of the Coordinators and issue the
+ <command>BARRIER</command> command, optionally followed by an
+ identifier. If the user does not specify an identifier, an unique
+ identifier will be generated and returned to the caller. Upon
+ receiving the <command>BARRIER</command> command, the Coordinator
+ temporarily pauses any new two-phase commits. It also communicates with
+ other Coordinators to ensure that there are no in-progress two-phase
+ commits in the cluster. At that point, a barrier <acronym>WAL</acronym>
+ record along with the user-given or system-generated BARRIER identifier
+ is writtent to the <acronym>WAL</acronym> stream of all Datanodes and
+ the Coordinators.
+ </para>
+
+ <para>
+ The user can create as many barriers as she wants to. At the time of
+ point-in-time-recovery, the same barrier id must be specified in the
+ <filename>recovery.conf</filename> files of all the Coordinators and
+ Datanodes. When every node in the cluster recovers to the same barrier
+ id, a cluster-wide consistent state is reached. Its important that
+ the recovery must be started from a backup taken before the barrier
+ was generated. If no matching barrier record is found, either because
+ the barrier was created before the base backup used for the recovery
+ or the said barrier was never created, the recovery is run to the end.
+ </para>
+
+ <para>
+ Note that in the current release, Postgres-XL has no means to detect
+ if another barrier with the same name already exists. So the user
+ must be careful while choosing a barrier identifier and ensure
+ that an unique identifier is used for every barrier. Similarly, at
+ the time of recovery, the user must specify the same barrier id in the
+ <filename>recovery.conf</filename> file on all the nodes. Otherwise,
+ the cluster would not recover to a global consistent image.
+ </para>
+ </sect1>
+<!## end>
</chapter>
diff --git a/doc-xc/src/sgml/xaggr.sgmlin b/doc-xc/src/sgml/xaggr.sgmlin
index 22d18d259e..5fccd25f79 100644
--- a/doc-xc/src/sgml/xaggr.sgmlin
+++ b/doc-xc/src/sgml/xaggr.sgmlin
@@ -54,6 +54,32 @@
state (either collection or transition) value.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Aggregate functions in <productname>Postgres-XL</productname>
+ are expressed in terms of <firstterm>state values</firstterm>
+ and <firstterm>state functions namely transition function and collection
+ function</firstterm>.
+ That is, an aggregate operates using 1. a transition state value that is updated
+ as each successive input row, in a given set of rows, is processed, and
+ 2. (optionally) collection state value that is updated as each successive
+ transition state value is processed.
+ To define a new aggregate
+ function, one selects a data type for the state value,
+ an initial value for the transition state, and a state transition
+ function. The state transition function is just an
+ ordinary function that could also be used outside the
+ context of the aggregate. A collection function and an initial value for
+ the collection state can also be specified, if one wants to take advantage of
+ distributed aggregation. Similar to transition function, a collection
+ function can be an ordinary function that could also be used outside the
+ context of the aggregate. A <firstterm>final function</firstterm>
+ can also be specified, in case the desired result of the aggregate
+ is different from the data that needs to be kept in the running
+ state (either collection or transition) value.
+ </para>
+<!## end>
&common;
<para>
@@ -96,6 +122,9 @@ SELECT sum(a) FROM test_complex;
<!## XC>
<productname>Postgres-XC</productname> can figure out which kind
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can figure out which kind
+<!## end>
of sum applies to a column of type <type>complex</type>.)
</para>
@@ -170,8 +199,59 @@ SELECT sum(a) FROM test_complex;
for null inputs).
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ In <productname>Postgres-XL</productname>, a user can provide collection
+ function if distributed aggregation is expected for improving performance. The
+ collection function essentially combines the state transition results produced
+ at different Datanodes. Without a final function the result produced by the
+ collection function is the result of aggregate. Above the definition of aggregate
+ <function>sum</> for complex numeric data types can be modified to have a
+ collection function as follows
+
+<screen>
+CREATE AGGREGATE sum (complex)
+(
+ sfunc = complex_add,
+ stype = complex,
+cfunc = complex_add,
+ initcond = '(0,0)'
+initcollect = '(0.0)'
+);
+
+SELECT sum(a) FROM test_complex;
+
+ sum
+-----------
+ (34,53.9)
+</screen>
+
+ Notice that both the CREATE AGGREGATE commands work in
+ <productname>Postgres-XL</productname>. An aggregate created by either command
+ produces the same results.
+ </para>
+
+&xlonly;
+ <para>
+ The above definitions of <function>sum</function> will return zero (the initial
+ state condition) if there are no nonnull input values.
+ Perhaps we want to return null in that case instead &mdash; the SQL standard
+ expects <function>sum</function> to behave that way. We can do this simply by
+ omitting the <literal>initcond</literal> phrase, so that the initial state
+ condition is null. Ordinarily this would mean that the <literal>sfunc</literal>
+ would need to check for a null state-condition input, but for
+ <function>sum</function> and some other simple aggregates like
+ <function>max</> and <function>min</>,
+ it is sufficient to insert the first nonnull input value into
+ the state variable and then start applying the transition function
+ at the second nonnull input value. <productname>Postgres-XL</productname>
+ will do that automatically if the initial condition is null and
+ the transition function is marked <quote>strict</> (i.e., not to be called
+ for null inputs).
+ </para>
+<!## end>
-&xconly;
<para>
<!## PG>
Another bit of default behavior for a <quote>strict</> transition function
@@ -179,6 +259,9 @@ SELECT sum(a) FROM test_complex;
<!## XC>
Another bit of default behavior for a <quote>strict</> transition/collection function
<!## end>
+<!## XL>
+ Another bit of default behavior for a <quote>strict</> transition/collection function
+<!## end>
is that the previous state value is retained unchanged whenever a
null input value is encountered. Thus, null values are ignored. If you
need some other behavior for null inputs, do not declare your
@@ -188,10 +271,12 @@ SELECT sum(a) FROM test_complex;
<!## XC>
transition/collection function as strict; instead code it to test for null inputs and
<!## end>
+<!## XL>
+ transition/collection function as strict; instead code it to test for null inputs and
+<!## end>
do whatever is needed.
</para>
-&xconly;
<para>
<function>avg</> (average) is a more complex example of an aggregate.
It requires
@@ -226,6 +311,19 @@ CREATE AGGREGATE avg (float8)
);
</programlisting>
<!## end>
+<!## XL>
+<programlisting>
+CREATE AGGREGATE avg (float8)
+(
+ sfunc = float8_accum,
+ stype = float8[],
+ cfunc = float8_collect,
+ finalfunc = float8_avg,
+ initcond = '{0,0}'
+ initcollect = '{0,0,0}'
+);
+</programlisting>
+<!## end>
<!## PG>
(<function>float8_accum</> requires a three-element array, not just
@@ -234,12 +332,15 @@ CREATE AGGREGATE avg (float8)
(<function>float8_accum</> and <function>float8_collect</>
require a three-element array, not just
<!## end>
+<!## XL>
+ (<function>float8_accum</> and <function>float8_collect</>
+ require a three-element array, not just
+<!## end>
two elements, because it accumulates the sum of squares as well as
the sum and count of the inputs. This is so that it can be used for
some other aggregates besides <function>avg</>.)
</para>
-&xconly;
<para>
Aggregate functions can use polymorphic
<!## PG>
@@ -248,6 +349,9 @@ CREATE AGGREGATE avg (float8)
<!## XC>
state transition/collection functions or final functions, so that the same functions
<!## end>
+<!## XL>
+ state transition/collection functions or final functions, so that the same functions
+<!## end>
can be used to implement multiple aggregates.
See <xref linkend="extend-types-polymorphic">
for an explanation of polymorphic functions.
@@ -299,7 +403,6 @@ SELECT attrelid::regclass, array_accum(atttypid::regtype)
</programlisting>
</para>
-&xconly;
<para>
A function written in C can detect that it is being called as an
aggregate transition or final function by calling
@@ -316,6 +419,10 @@ if (AggCheckCallContext(fcinfo, NULL))
function, the first input to transition or collection function
must be a temporary transition/collection value and can therefore safely be modified
<!## end>
+<!## XL>
+ function, the first input to transition or collection function
+ must be a temporary transition/collection value and can therefore safely be modified
+<!## end>
in-place rather than allocating a new copy. (This is the <emphasis>only</>
case where it is safe for a function to modify a pass-by-reference input.
In particular, aggregate final functions should not modify their inputs in
diff --git a/doc-xc/src/sgml/xc-constraint.sgmlin b/doc-xc/src/sgml/xc-constraint.sgmlin
index f6e31cc5f9..5e9a75a8c6 100644
--- a/doc-xc/src/sgml/xc-constraint.sgmlin
+++ b/doc-xc/src/sgml/xc-constraint.sgmlin
@@ -4,3 +4,11 @@
You should not specify any constraint which need to refer to rows at remote node.
</para>
<!## end>
+<!## XL>
+<para>
+<productname>Postgres-XL</> supports constraints only enforceable locally.
+You should not specify any constraint which need to refer to rows on remote node.
+For example, a unique index on a replicated is locally enforceable (every tuple exists
+on every node). A unique index on a column of a round-robin distributed table cannot be enforced locally.
+</para>
+<!## end>
diff --git a/doc-xc/src/sgml/xfunc.sgmlin b/doc-xc/src/sgml/xfunc.sgmlin
index d5ce7289d7..0f47f89e34 100644
--- a/doc-xc/src/sgml/xfunc.sgmlin
+++ b/doc-xc/src/sgml/xfunc.sgmlin
@@ -16,6 +16,9 @@
<!## XC>
Similar to <productname>PostgreSQL</productname>, <productname>Postgres-XC</> provides four kinds of
<!## end>
+<!## XL>
+ Similar to <productname>PostgreSQL</productname>, <productname>Postgres-XL</> provides four kinds of
+<!## end>
functions:
<itemizedlist>
@@ -79,6 +82,9 @@
<!## XC>
directory in the <productname>Postgres-XC</productname> source
<!## end>
+<!## XL>
+ directory in the <productname>Postgres-XL</productname> source
+<!## end>
distribution.
</para>
@@ -90,6 +96,14 @@
releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ <productname>Postgres-XL</> allow only one SQL statement embedded
+ in each function. This restriction will be removed in the future
+ releases.
+ </para>
+<!## end>
</sect1>
<sect1 id="xfunc-sql">
@@ -304,6 +318,15 @@ $$ LANGUAGE SQL;
yet. They will be supported in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ Here, original <productname>PostgreSQL</> document describes
+ multiple statement function and <command>RETURNING</> clause,
+ neither of them are not supported by <productname>Postgres-XL</>
+ yet. They will be supported in the future releases.
+ </para>
+<!## end>
</sect2>
<sect2 id="xfunc-sql-composite-functions">
@@ -603,6 +626,14 @@ $$ LANGUAGE SQL;
will be supported in the future releases.
</para>
<!## end>
+<!## XL>
+&xlonly;
+ <para>
+ This feature needs <command>RETURNING</> clause, which is not
+ supported in current <productname>Postgres-XL</>. This feature
+ will be supported in the future releases.
+ </para>
+<!## end>
</sect2>
<sect2 id="xfunc-output-parameters">
@@ -674,6 +705,9 @@ LANGUAGE SQL;
<!## XC>
<productname>Postgres-XC</productname> considers only the input
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> considers only the input
+<!## end>
parameters to define the function's calling signature. That means
also that only the input parameters matter when referencing the function
for purposes such as dropping it. We could drop the above function
@@ -718,6 +752,17 @@ DROP FUNCTION sum_n_product (int, int);
may return wrong result.
</para>
<!## end>
+<!## XL>
+<!-- NOTICE:
+ VARIADIC is not well tested yet. CREATE FUNCTION succeeds but the result can be wrong.
+-->
+&xlonly;
+ <para>
+ It is highly recommended not to use <literal>VARIADIC</> in the
+ current <productname>Postgres-XL</>. It is not well reviewed and
+ may return wrong result.
+ </para>
+<!## end>
<para>
<acronym>SQL</acronym> functions can be declared to accept
variable numbers of arguments, so long as all the <quote>optional</>
@@ -1176,6 +1221,18 @@ SELECT concat_values('|', 1, 4, 2);
supported in the future releases.
</para>
<!## end>
+<!## XL>
+<!-- NOTICE:
+ VARIADIC is not well tested and supported
+-->
+&xlonly;
+ <para>
+ Here, original <productname>PostgreSQL</> document describes an
+ example with <command>VARIADIC</>, which is not well tested and
+ supported in current <productname>Postgres-XL</>. This may be
+ supported in the future releases.
+ </para>
+<!## end>
</sect2>
<sect2>
@@ -1440,6 +1497,9 @@ CREATE FUNCTION test(int, int) RETURNS int
<!## XC>
<productname>Postgres-XC</productname> will execute all commands of a
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will execute all commands of a
+<!## end>
<literal>STABLE</> function using the snapshot established for the
calling query, and so it will see a fixed view of the database throughout
that query.
@@ -1456,6 +1516,9 @@ CREATE FUNCTION test(int, int) RETURNS int
<!## XC>
However, <productname>Postgres-XC</productname> does not enforce that you
<!## end>
+<!## XL>
+ However, <productname>Postgres-XL</productname> does not enforce that you
+<!## end>
do not do that.
</para>
@@ -1493,6 +1556,9 @@ CREATE FUNCTION test(int, int) RETURNS int
<!## XC>
<productname>Postgres-XC</productname> allows user-defined functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows user-defined functions
+<!## end>
to be written in other languages besides SQL and C. These other
languages are generically called <firstterm>procedural
languages</firstterm> (<acronym>PL</>s).
@@ -1503,6 +1569,9 @@ CREATE FUNCTION test(int, int) RETURNS int
<!## XC>
<productname>Postgres-XC</productname> server; they are offered
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server; they are offered
+<!## end>
by loadable modules.
See <xref linkend="xplang"> and following chapters for more
information.
@@ -1522,6 +1591,9 @@ CREATE FUNCTION test(int, int) RETURNS int
<!## XC>
linked into the <productname>Postgres-XC</productname> server.
<!## end>
+<!## XL>
+ linked into the <productname>Postgres-XL</productname> server.
+<!## end>
The <quote>body</quote> of the function definition
specifies the C-language name of the function, which need not be the
same as the name being declared for SQL use.
@@ -1629,6 +1701,9 @@ CREATE FUNCTION square_root(double precision) RETURNS double precision
<!## XC>
that part is replaced by the <productname>Postgres-XC</> package
<!## end>
+<!## XL>
+ that part is replaced by the <productname>Postgres-XL</> package
+<!## end>
library directory
name, which is determined at build time.<indexterm><primary>$libdir</></>
</para>
@@ -1674,6 +1749,9 @@ CREATE FUNCTION square_root(double precision) RETURNS double precision
<!## XC>
The user ID the <productname>Postgres-XC</productname> server runs
<!## end>
+<!## XL>
+ The user ID the <productname>Postgres-XL</productname> server runs
+<!## end>
as must be able to traverse the path to the file you intend to
load. Making the file or a higher-level directory not readable
and/or not executable by the <systemitem>postgres</systemitem>
@@ -1695,6 +1773,9 @@ CREATE FUNCTION square_root(double precision) RETURNS double precision
<!## XC>
<productname>Postgres-XC</productname> will not compile a C function
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will not compile a C function
+<!## end>
automatically. The object file must be compiled before it is referenced
in a <command>CREATE
FUNCTION</> command. See <xref linkend="dfunc"> for additional
@@ -1714,6 +1795,9 @@ CREATE FUNCTION square_root(double precision) RETURNS double precision
<!## XC>
incompatible server, <productname>Postgres-XC</productname> checks that the
<!## end>
+<!## XL>
+ incompatible server, <productname>Postgres-XL</productname> checks that the
+<!## end>
file contains a <quote>magic block</> with the appropriate contents.
This allows the server to detect obvious incompatibilities, such as code
compiled for a different major version of
@@ -1723,6 +1807,9 @@ CREATE FUNCTION square_root(double precision) RETURNS double precision
<!## XC>
<productname>Postgres-XC</productname>. A magic block is required as of
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. A magic block is required as of
+<!## end>
<productname>PostgreSQL</productname> 8.2. To include a magic block,
write this in one (and only one) of the module source files, after having
included the header <filename>fmgr.h</>:
@@ -1811,6 +1898,20 @@ PG_MODULE_MAGIC;
to input, process, and output the data.
</para>
<!## end>
+<!## XL>
+ <para>
+ To know how to write C-language functions, you need to know how
+ <productname>Postgres-XL</productname> internally represents base
+ data types and how they can be passed to and from functions.
+ Internally, <productname>Postgres-XL</productname> regards a base
+ type as a <quote>blob of memory</quote>. The user-defined
+ functions that you define over a type in turn define the way that
+ <productname>Postgres-XL</productname> can operate on it. That
+ is, <productname>Postgres-XL</productname> will only store and
+ retrieve the data from disk and use your user-defined functions
+ to input, process, and output the data.
+ </para>
+<!## end>
<para>
Base types can have one of three internal formats:
@@ -1859,6 +1960,9 @@ typedef int int4;
<!## XC>
implementation of a <productname>Postgres-XC</productname> type:
<!## end>
+<!## XL>
+ implementation of a <productname>Postgres-XL</productname> type:
+<!## end>
<programlisting>
/* 16-byte structure, passed by reference */
@@ -1875,6 +1979,9 @@ typedef struct
<!## XC>
them in and out of <productname>Postgres-XC</productname> functions.
<!## end>
+<!## XL>
+ them in and out of <productname>Postgres-XL</productname> functions.
+<!## end>
To return a value of such a type, allocate the right amount of
memory with <literal>palloc</literal>, fill in the allocated memory,
and return a pointer to it. (Also, if you just want to return the
@@ -1957,6 +2064,9 @@ memcpy(destination->data, buffer, 40);
<!## XC>
that uses a built-in type of <productname>Postgres-XC</>.
<!## end>
+<!## XL>
+ that uses a built-in type of <productname>Postgres-XL</>.
+<!## end>
The <quote>Defined In</quote> column gives the header file that
needs to be included to get the type definition. (The actual
definition might be in a different file that is included by the
@@ -2242,6 +2352,9 @@ concat_text(text *arg1, text *arg2)
<!## XC>
we could define the functions to <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ we could define the functions to <productname>Postgres-XL</productname>
+<!## end>
with commands like this:
<programlisting>
@@ -2277,6 +2390,9 @@ CREATE FUNCTION concat_text(text, text) RETURNS text
<!## XC>
<productname>Postgres-XC</productname> tutorial directory, which
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> tutorial directory, which
+<!## end>
contains the code for the examples used in this section).
(Better style would be to use just <literal>'funcs'</> in the
<literal>AS</> clause, after having added
@@ -2330,6 +2446,9 @@ PG_FUNCTION_INFO_V1(funcname);
<!## XC>
<productname>Postgres-XC</> assumes that all internal functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</> assumes that all internal functions
+<!## end>
use the version-1 convention. It is, however, required for
dynamically-loaded functions.
</para>
@@ -2533,6 +2652,12 @@ concat_text(PG_FUNCTION_ARGS)
written in languages other than C into
<productname>Postgres-XC</productname>, this is usually difficult
<!## end>
+<!## XL>
+ some coding rules for <productname>Postgres-XL</productname>
+ C-language functions. While it might be possible to load functions
+ written in languages other than C into
+ <productname>Postgres-XL</productname>, this is usually difficult
+<!## end>
(when it is possible at all) because other languages, such as
C++, FORTRAN, or Pascal often do not follow the same calling
convention as C. That is, other languages do not pass argument
@@ -2555,6 +2680,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
to find out where the <productname>Postgres-XC</> server header
<!## end>
+<!## XL>
+ to find out where the <productname>Postgres-XL</> server header
+<!## end>
files are installed on your system (or the system that your
users will be running on).
</para>
@@ -2569,6 +2697,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
loaded into <productname>Postgres-XC</productname> always
<!## end>
+<!## XL>
+ loaded into <productname>Postgres-XL</productname> always
+<!## end>
requires special flags. See <xref linkend="dfunc"> for a
detailed explanation of how to do it for your particular
operating system.
@@ -2591,6 +2722,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
<productname>Postgres-XC</productname> functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> functions
+<!## end>
<function>palloc</function><indexterm><primary>palloc</></> and <function>pfree</function><indexterm><primary>pfree</></>
instead of the corresponding C library functions
<function>malloc</function> and <function>free</function>.
@@ -2620,6 +2754,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
Most of the internal <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ Most of the internal <productname>Postgres-XL</productname>
+<!## end>
types are declared in <filename>postgres.h</filename>, while
the function manager interfaces
(<symbol>PG_FUNCTION_ARGS</symbol>, etc.) are in
@@ -2643,6 +2780,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
<productname>Postgres-XC</productname> server executable. You
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> server executable. You
+<!## end>
will have to rename your functions or variables if you get
error messages to this effect.
</para>
@@ -2668,6 +2808,9 @@ concat_text(PG_FUNCTION_ARGS)
<!## XC>
<productname>Postgres-XC</productname> provides a function
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> provides a function
+<!## end>
interface for accessing fields of composite types from C.
</para>
@@ -2745,6 +2888,9 @@ c_overpaid(PG_FUNCTION_ARGS)
<!## XC>
<productname>Postgres-XC</productname> system function that
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> system function that
+<!## end>
returns attributes out of the specified row. It has
three arguments: the argument of type <type>HeapTupleHeader</type> passed
into
@@ -3404,6 +3550,9 @@ if (!ptr)
<!## XC>
Although the <productname>Postgres-XC</productname> backend is written in
<!## end>
+<!## XL>
+ Although the <productname>Postgres-XL</productname> backend is written in
+<!## end>
C, it is possible to write extensions in C++ if these guidelines are
followed:
diff --git a/doc-xc/src/sgml/xindex.sgmlin b/doc-xc/src/sgml/xindex.sgmlin
index 2610a54d41..a0130e77d9 100644
--- a/doc-xc/src/sgml/xindex.sgmlin
+++ b/doc-xc/src/sgml/xindex.sgmlin
@@ -40,6 +40,9 @@
<!## XC>
<productname>Postgres-XC</productname>, but all index methods are
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>, but all index methods are
+<!## end>
described in <classname>pg_am</classname>. It is possible to add a
new index method by defining the required interface routines and
then creating a row in <classname>pg_am</classname> &mdash; but that is
@@ -104,6 +107,10 @@
<productname>Postgres-XC</productname> allows the user to define operators,
<productname>Postgres-XC</productname> cannot look at the name of an operator
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows the user to define operators,
+ <productname>Postgres-XL</productname> cannot look at the name of an operator
+<!## end>
(e.g., <literal>&lt;</> or <literal>&gt;=</>) and tell what kind of
comparison it is. Instead, the index method defines a set of
<quote>strategies</>, which can be thought of as generalized operators.
@@ -623,6 +630,9 @@ CREATE OPERATOR &lt; (
<!## XC>
Although <productname>Postgres-XC</productname> can cope with
<!## end>
+<!## XL>
+ Although <productname>Postgres-XL</productname> can cope with
+<!## end>
functions having the same SQL name as long as they have different
argument data types, C can only cope with one global function
having a given name. So we shouldn't name the C function
@@ -642,6 +652,9 @@ CREATE OPERATOR &lt; (
<!## XC>
<productname>Postgres-XC</productname> to distinguish it by
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> to distinguish it by
+<!## end>
argument data types from any other SQL function of the same name.
To keep the example simple, we make the function have the same
names at the C level and SQL level.
@@ -725,6 +738,9 @@ CREATE OPERATOR CLASS complex_abs_ops
<!## XC>
To handle these needs, <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ To handle these needs, <productname>Postgres-XL</productname>
+<!## end>
uses the concept of an <firstterm>operator
family</><indexterm><primary>operator family</></indexterm>.
An operator family contains one or more operator classes, and can also
@@ -761,6 +777,9 @@ CREATE OPERATOR CLASS complex_abs_ops
<!## XC>
As an example, <productname>Postgres-XC</productname> has a built-in
<!## end>
+<!## XL>
+ As an example, <productname>Postgres-XL</productname> has a built-in
+<!## end>
B-tree operator family <literal>integer_ops</>, which includes operator
classes <literal>int8_ops</>, <literal>int4_ops</>, and
<literal>int2_ops</> for indexes on <type>bigint</> (<type>int8</>),
@@ -924,6 +943,9 @@ ALTER OPERATOR FAMILY integer_ops USING btree ADD
<!## XC>
<productname>Postgres-XC</productname> uses operator classes to infer the
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> uses operator classes to infer the
+<!## end>
properties of operators in more ways than just whether they can be used
with indexes. Therefore, you might want to create operator classes
even if you have no intention of indexing any columns of your data type.
@@ -939,6 +961,9 @@ ALTER OPERATOR FAMILY integer_ops USING btree ADD
<!## XC>
<productname>Postgres-XC</productname> looks for the default B-tree operator
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> looks for the default B-tree operator
+<!## end>
class for the data type. The <quote>equals</> member of this operator
class defines the system's notion of equality of values for
<literal>GROUP BY</> and <literal>DISTINCT</>, and the sort ordering
diff --git a/doc-xc/src/sgml/xlonly.sgmlin b/doc-xc/src/sgml/xlonly.sgmlin
new file mode 100644
index 0000000000..2e6110c5b1
--- /dev/null
+++ b/doc-xc/src/sgml/xlonly.sgmlin
@@ -0,0 +1,7 @@
+<!## XL>
+<note>
+<para>
+The following description applies only to <productname>Postgres-XL</>
+</para>
+</note>
+<!## end>
diff --git a/doc-xc/src/sgml/xml2.sgmlin b/doc-xc/src/sgml/xml2.sgmlin
index fdb753696b..8bb8e30461 100644
--- a/doc-xc/src/sgml/xml2.sgmlin
+++ b/doc-xc/src/sgml/xml2.sgmlin
@@ -323,6 +323,9 @@ AS t(article_id integer, author text, page_count integer, title text);
<!## XC>
take the string representation of the XPath result and use Postgres-XC input
<!## end>
+<!## XL>
+ take the string representation of the XPath result and use Postgres-XL input
+<!## end>
functions to transform it into an integer (or whatever type the <type>AS</>
clause requests). An error will result if it can't do this &mdash; for
example if the result is empty &mdash; so you may wish to just stick to
@@ -479,6 +482,9 @@ xslt_process(text document, text stylesheet, text paramlist) returns text
<!## XC>
It has the same BSD licence as Postgres-XC.
<!## end>
+<!## XL>
+ It has the same BSD licence as PostgreSQL.
+<!## end>
</para>
</sect2>
diff --git a/doc-xc/src/sgml/xoper.sgmlin b/doc-xc/src/sgml/xoper.sgmlin
index d2090d737a..f9e0285b58 100644
--- a/doc-xc/src/sgml/xoper.sgmlin
+++ b/doc-xc/src/sgml/xoper.sgmlin
@@ -28,6 +28,9 @@
<!## XC>
<productname>Postgres-XC</productname> supports left unary, right
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> supports left unary, right
+<!## end>
unary, and binary operators. Operators can be
overloaded;<indexterm><primary>overloading</primary><secondary>operators</secondary></indexterm>
that is, the same operator name can be used for different operators
@@ -92,6 +95,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
A <productname>Postgres-XC</productname> operator definition can include
<!## end>
+<!## XL>
+ A <productname>Postgres-XL</productname> operator definition can include
+<!## end>
several optional clauses that tell the system useful things about how
the operator behaves. These clauses should be provided whenever
appropriate, because they can make for considerable speedups in execution
@@ -111,6 +117,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
<productname>Postgres-XC</productname>. The ones described here are all
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname>. The ones described here are all
+<!## end>
the ones that release &version; understands.
</para>
@@ -136,6 +145,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
the commutator operator is all that <productname>Postgres-XC</productname>
<!## end>
+<!## XL>
+ the commutator operator is all that <productname>Postgres-XL</productname>
+<!## end>
needs to be given to look up the commutator, and that's all that needs to
be provided in the <literal>COMMUTATOR</> clause.
</para>
@@ -157,6 +169,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
<productname>Postgres-XC</productname> will <emphasis>not</> simply
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> will <emphasis>not</> simply
+<!## end>
assume that this is a valid transformation &mdash; the creator of the
<literal>=</> operator must specify that it is valid, by marking the
operator with commutator information.
@@ -180,6 +195,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
Since <productname>Postgres-XC</productname> knows that commutative
<!## end>
+<!## XL>
+ Since <productname>Postgres-XL</productname> knows that commutative
+<!## end>
operators come in pairs, when it sees the second definition it will
automatically go back and fill in the missing <literal>COMMUTATOR</> clause in
the first definition.
@@ -195,6 +213,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
in both definitions. When <productname>Postgres-XC</productname> processes
<!## end>
+<!## XL>
+ in both definitions. When <productname>Postgres-XL</productname> processes
+<!## end>
the first definition and realizes that <literal>COMMUTATOR</> refers to a nonexistent
operator, the system will make a dummy entry for that operator in the
system catalog. This dummy entry will have valid data only
@@ -205,6 +226,9 @@ SELECT (a + b) AS c FROM test_complex;
<!## XC>
since that's all that <productname>Postgres-XC</productname> can deduce
<!## end>
+<!## XL>
+ since that's all that <productname>Postgres-XL</productname> can deduce
+<!## end>
at this point. The first operator's catalog entry will link to this
dummy entry. Later, when you define the second operator, the system
updates the dummy entry with the additional information from the second
diff --git a/doc-xc/src/sgml/xplang.sgmlin b/doc-xc/src/sgml/xplang.sgmlin
index 804929c829..1a8d54b3fa 100644
--- a/doc-xc/src/sgml/xplang.sgmlin
+++ b/doc-xc/src/sgml/xplang.sgmlin
@@ -16,6 +16,9 @@
<!## XC>
<productname>Postgres-XC</productname> allows user-defined functions
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> allows user-defined functions
+<!## end>
to be written in other languages besides SQL and C. These other
languages are generically called <firstterm>procedural
languages</firstterm> (<acronym>PL</>s). For a function
@@ -31,6 +34,9 @@
<!## XC>
<productname>Postgres-XC</productname> and an existing implementation
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> and an existing implementation
+<!## end>
of a programming language. The handler itself is a
C language function compiled into a shared object and
loaded on demand, just like any other C function.
@@ -44,6 +50,9 @@
<!## XC>
standard <productname>Postgres-XC</productname> distribution:
<!## end>
+<!## XL>
+ standard <productname>Postgres-XL</productname> distribution:
+<!## end>
<application>PL/pgSQL</application> (<xref linkend="plpgsql">),
<application>PL/Tcl</application> (<xref linkend="pltcl">),
<application>PL/Perl</application> (<xref linkend="plperl">), and
@@ -243,6 +252,9 @@ CREATE TRUSTED PROCEDURAL LANGUAGE plperl
<!## XC>
In a default <productname>Postgres-XC</productname> installation,
<!## end>
+<!## XL>
+ In a default <productname>Postgres-XL</productname> installation,
+<!## end>
the handler for the <application>PL/pgSQL</application> language
is built and installed into the <quote>library</quote>
directory; furthermore, the <application>PL/pgSQL</application> language
diff --git a/doc-xc/src/sgml/xtypes.sgmlin b/doc-xc/src/sgml/xtypes.sgmlin
index 8e87e019fb..bf94ac5c56 100644
--- a/doc-xc/src/sgml/xtypes.sgmlin
+++ b/doc-xc/src/sgml/xtypes.sgmlin
@@ -18,6 +18,9 @@
<!## XC>
<productname>Postgres-XC</productname> can be extended to support new
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> can be extended to support new
+<!## end>
data types. This section describes how to define new base types,
which are data types defined below the level of the <acronym>SQL</>
language. Creating a new base type requires implementing functions
@@ -233,6 +236,9 @@ CREATE TYPE complex (
<!## XC>
<productname>Postgres-XC</productname> automatically provides support
<!## end>
+<!## XL>
+ <productname>Postgres-XL</productname> automatically provides support
+<!## end>
for arrays of that type. The array type typically
has the same name as the base type with the underscore character
(<literal>_</>) prepended.
diff --git a/doc/bug.template b/doc/bug.template
index 3430b75363..20af34247f 100644
--- a/doc/bug.template
+++ b/doc/bug.template
@@ -27,7 +27,7 @@ System Configuration:
Operating System (example: Linux 2.4.18) :
- PostgreSQL version (example: PostgreSQL 9.2beta2): PostgreSQL 9.2beta2
+ PostgreSQL version (example: Postgres-XL 9.2.0): Postgres-XL 9.2.0
Compiler used (example: gcc 3.3.5) :
diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml
index d03bedd12a..dab2a1b3de 100644
--- a/doc/src/sgml/ref/pg_basebackup.sgml
+++ b/doc/src/sgml/ref/pg_basebackup.sgml
@@ -343,6 +343,20 @@ PostgreSQL documentation
<variablelist>
<varlistentry>
<term><option>-s <replaceable class="parameter">interval</replaceable></option></term>
+ <term><option>--status-interval=<replaceable class="parameter">interval</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the number of seconds between status packets sent back to the
+ server. This is required when streaming the transaction log (using
+ <literal>--xlog=stream</literal>) if replication timeout is configured
+ on the server, and allows for easier monitoring. A value of zero disables
+ the status updates completely. The default value is 10 seconds.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-s <replaceable class="parameter">interval</replaceable></option></term>
<term><option>--statusint=<replaceable class="parameter">interval</replaceable></option></term>
<listitem>
<para>
diff --git a/doc/src/sgml/ref/pg_receivexlog.sgml b/doc/src/sgml/ref/pg_receivexlog.sgml
index 5eefefbe87..d4330643c9 100644
--- a/doc/src/sgml/ref/pg_receivexlog.sgml
+++ b/doc/src/sgml/ref/pg_receivexlog.sgml
@@ -124,6 +124,19 @@ PostgreSQL documentation
<variablelist>
<varlistentry>
<term><option>-s <replaceable class="parameter">interval</replaceable></option></term>
+ <term><option>--status-interval=<replaceable class="parameter">interval</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the number of seconds between status packets sent back to the
+ server. This is required if replication timeout is configured on the
+ server, and allows for easier monitoring. A value of zero disables the
+ status updates completely. The default value is 10 seconds.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-s <replaceable class="parameter">interval</replaceable></option></term>
<term><option>--statusint=<replaceable class="parameter">interval</replaceable></option></term>
<listitem>
<para>