-<!-- $PostgreSQL: pgsql/doc/src/sgml/advanced.sgml,v 1.56 2008/12/31 00:08:32 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/advanced.sgml,v 1.57 2009/02/04 21:30:41 alvherre Exp $ -->
<chapter id="tutorial-advanced">
<title>Advanced Features</title>
rank() OVER (PARTITION BY depname ORDER BY salary DESC, empno) AS pos
FROM empsalary
) AS ss
-WHERE pos < 3;
+WHERE pos < 3;
</programlisting>
The above query only shows the rows from the inner query having
-<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.193 2009/02/02 09:49:29 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.194 2009/02/04 21:30:41 alvherre Exp $ -->
<!--
Documentation of the system catalogs, directed toward PostgreSQL developers
-->
<table>
<title><structname>pg_aggregate</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_am</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_amop</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_amproc</structname> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_attrdef</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_attribute</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_authid</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_auth_members</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_autovacuum</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_cast</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_class</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_constraint</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_conversion</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_database</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_depend</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_description</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_enum</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_foreign_data_wrapper</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_foreign_server</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_index</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_inherits</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_language</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_largeobject</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_listener</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_namespace</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_opclass</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_operator</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_opfamily</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_pltemplate</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_proc</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_rewrite</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_shdepend</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_shdescription</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_statistic</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_tablespace</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_trigger</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_ts_config</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_ts_config_map</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_ts_dict</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_ts_parser</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_ts_template</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_type</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table id="catalog-typcategory-table">
<title><structfield>typcategory</> Codes</title>
- <tgroup cols=2>
+ <tgroup cols="2">
<thead>
<row>
<entry>Code</entry>
<table>
<title><structname>pg_user_mapping</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_cursors</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_group</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_indexes</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_locks</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_prepared_statements</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_prepared_xacts</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_roles</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_rules</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_settings</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_shadow</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_stats</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_tables</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_timezone_abbrevs</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_timezone_names</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_user</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_user_mappings</> Columns</title>
- <tgroup cols=3>
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
<table>
<title><structname>pg_views</> Columns</title>
- <tgroup cols=4>
+ <tgroup cols="4">
<thead>
<row>
<entry>Name</entry>
-<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.318 2009/01/09 13:37:18 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.319 2009/02/04 21:30:41 alvherre Exp $ -->
<chapter id="installation">
<title><![%standalone-include[<productname>PostgreSQL</>]]>
<para>
Start <command>cygserver</command> for shared memory support.
To do this, enter the command <literal>/usr/sbin/cygserver
- &</literal>. This program needs to be running anytime you
+ &</literal>. This program needs to be running anytime you
start the PostgreSQL server or initialize a database cluster
(<command>initdb</command>). The
default <command>cygserver</command> configuration may need to
-<!-- $PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.136 2008/11/16 17:34:28 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.137 2009/02/04 21:30:41 alvherre Exp $ -->
<chapter id="plpgsql">
<title><application>PL/pgSQL</application> - <acronym>SQL</acronym> Procedural Language</title>
to SQL-injection attacks since there is no need for quoting or escaping.
An example is:
<programlisting>
-EXECUTE 'SELECT count(*) FROM mytable WHERE inserted_by = $1 AND inserted <= $2'
+EXECUTE 'SELECT count(*) FROM mytable WHERE inserted_by = $1 AND inserted <= $2'
INTO c
USING checked_user, checked_date;
</programlisting>
<programlisting>
EXECUTE 'SELECT count(*) FROM '
|| tabname::regclass
- || ' WHERE inserted_by = $1 AND inserted <= $2'
+ || ' WHERE inserted_by = $1 AND inserted <= $2'
INTO c
USING checked_user, checked_date;
</programlisting>
<productname>PostgreSQL</>'s <application>PL/pgSQL</application>
language and Oracle's <application>PL/SQL</application> language,
to help developers who port applications from
- <trademark class=registered>Oracle</> to <productname>PostgreSQL</>.
+ <trademark class="registered">Oracle</> to <productname>PostgreSQL</>.
</para>
<para>
-<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.129 2008/12/31 23:42:56 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.130 2009/02/04 21:30:41 alvherre Exp $ -->
<chapter id="sql-syntax">
<title>SQL Syntax</title>
identifiers</secondary></indexterm> A variant of quoted
identifiers allows including escaped Unicode characters identified
by their code points. This variant starts
- with <literal>U&</literal> (upper or lower case U followed by
+ with <literal>U&</literal> (upper or lower case U followed by
ampersand) immediately before the opening double quote, without
- any spaces in between, for example <literal>U&"foo"</literal>.
+ any spaces in between, for example <literal>U&"foo"</literal>.
(Note that this creates an ambiguity with the
- operator <literal>&</literal>. Use spaces around the operator to
+ operator <literal>&</literal>. Use spaces around the operator to
avoid this problem.) Inside the quotes, Unicode characters can be
specified in escaped form by writing a backslash followed by the
four-digit hexadecimal code point number or alternatively a
hexadecimal code point number. For example, the
identifier <literal>"data"</literal> could be written as
<programlisting>
-U&"d\0061t\+000061"
+U&"d\0061t\+000061"
</programlisting>
The following less trivial example writes the Russian
word <quote>slon</quote> (elephant) in Cyrillic letters:
<programlisting>
-U&"\0441\043B\043E\043D"
+U&"\0441\043B\043E\043D"
</programlisting>
</para>
the <literal>UESCAPE</literal><indexterm><primary>UESCAPE</primary></indexterm>
clause after the string, for example:
<programlisting>
-U&"d!0061t!+000061" UESCAPE '!'
+U&"d!0061t!+000061" UESCAPE '!'
</programlisting>
The escape character can be any single character other than a
hexadecimal digit, the plus sign, a single quote, a double quote,
<productname>PostgreSQL</productname> also supports another type
of escape syntax for strings that allows specifying arbitrary
Unicode characters by code point. A Unicode escape string
- constant starts with <literal>U&</literal> (upper or lower case
+ constant starts with <literal>U&</literal> (upper or lower case
letter U followed by ampersand) immediately before the opening
quote, without any spaces in between, for
- example <literal>U&'foo'</literal>. (Note that this creates an
- ambiguity with the operator <literal>&</literal>. Use spaces
+ example <literal>U&'foo'</literal>. (Note that this creates an
+ ambiguity with the operator <literal>&</literal>. Use spaces
around the operator to avoid this problem.) Inside the quotes,
Unicode characters can be specified in escaped form by writing a
backslash followed by the four-digit hexadecimal code point
followed by a six-digit hexadecimal code point number. For
example, the string <literal>'data'</literal> could be written as
<programlisting>
-U&'d\0061t\+000061'
+U&'d\0061t\+000061'
</programlisting>
The following less trivial example writes the Russian
word <quote>slon</quote> (elephant) in Cyrillic letters:
<programlisting>
-U&'\0441\043B\043E\043D'
+U&'\0441\043B\043E\043D'
</programlisting>
</para>
the <literal>UESCAPE</literal><indexterm><primary>UESCAPE</primary></indexterm>
clause after the string, for example:
<programlisting>
-U&'d!0061t!+000061' UESCAPE '!'
+U&'d!0061t!+000061' UESCAPE '!'
</programlisting>
The escape character can be any single character other than a
hexadecimal digit, the plus sign, a single quote, a double quote,