On 2017/08/01 6:41, David G. Johnston wrote:
> On Tue, Jul 25, 2017 at 11:29 PM, Amit Langote <
> langote_amit...@lab.ntt.co.jp> wrote:
> 
>>> I'm curious what the other limitations are...
>>
>> When I first wrote that documentation line (I am assuming you're asking
>> about "although these have some limitations that normal tables do not"), I
>> was thinking about the fact that the core system does not enforce
>> (locally) any constraints defined on foreign tables.  Since we allow
>> inserting data into partitions directly, it is imperative that we enforce
>> the "partition constraint" along with the traditional constraints such as
>> NOT NULL and CHECK constraints, which we can do for local table partitions
>> but not for foreign table ones.
>>
>> Anyway, attached patch documents all these limitations about foreign table
>> partitions more prominently.
>>
> 
> ​The revised patch down-thread looks good.  Thanks.
> 
> I indeed was referring to the paragraph you quoted.
> 
> ​I would probably just   s/For example/In particular/   and call it good -
> or maybe also tell the user that all the limitations are listed in the
> notes section for create foreign table (though my first thoughts are all
> quite wordy).

Thanks for the review.

On a second thought though, I think we should list the foreign table
partitions' limitations in only one place, that is, the CREATE FOREIGN
TABLE reference page.  Listing them under 5.10.2.3. seems a bit off to me,
because other limitations listed there are those of the new partitioned
table objects, such as lack of global index constraints, etc.  Lack of
tuple-routing to foreign partitions does not seem to me of the similar
nature.  Also, the same text is no longer repeated in 3 different places.

Thoughts on the updated patch?

Thanks,
Amit
From f79f98710a5bf6bd1b0a921ed2e57fa510c6ac60 Mon Sep 17 00:00:00 2001
From: amit <amitlangot...@gmail.com>
Date: Mon, 3 Apr 2017 16:45:15 +0900
Subject: [PATCH] Clarify that partition constraint is not enforced on foreign
 tables

---
 doc/src/sgml/ddl.sgml                      |  8 +++-----
 doc/src/sgml/ref/create_foreign_table.sgml | 17 +++++++++++------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml
index b05a9c2150..a707c3e22a 100644
--- a/doc/src/sgml/ddl.sgml
+++ b/doc/src/sgml/ddl.sgml
@@ -2986,11 +2986,9 @@ VALUES ('Albany', NULL, NULL, 'NY');
    </para>
 
    <para>
-    Partitions can also be foreign tables
-    (see <xref linkend="sql-createforeigntable">),
-    although these have some limitations that normal tables do not.  For
-    example, data inserted into the partitioned table is not routed to
-    foreign table partitions.
+    Partitions can also be foreign tables, although they have some limitations
+    that normal tables do not; see <xref linkend="sql-createforeigntable"> for
+    more information.
    </para>
 
    <sect3 id="ddl-partitioning-declarative-example">
diff --git a/doc/src/sgml/ref/create_foreign_table.sgml 
b/doc/src/sgml/ref/create_foreign_table.sgml
index 065c982082..43a6cbcfab 100644
--- a/doc/src/sgml/ref/create_foreign_table.sgml
+++ b/doc/src/sgml/ref/create_foreign_table.sgml
@@ -79,7 +79,9 @@ CHECK ( <replaceable 
class="PARAMETER">expression</replaceable> ) [ NO INHERIT ]
   <para>
    If <literal>PARTITION OF</literal> clause is specified then the table is
    created as a partition of <literal>parent_table</literal> with specified
-   bounds.
+   bounds.  Note that routing tuples to partitions that are foreign tables
+   is not supported.  So, if a tuple inserted (or copied) into the table
+   routes to one of the foreign partitions, an error will occur.
   </para>
 
   <para>
@@ -279,16 +281,19 @@ CHECK ( <replaceable 
class="PARAMETER">expression</replaceable> ) [ NO INHERIT ]
   <title>Notes</title>
 
    <para>
-    Constraints on foreign tables (such as <literal>CHECK</>
-    or <literal>NOT NULL</> clauses) are not enforced by the
-    core <productname>PostgreSQL</> system, and most foreign data wrappers
-    do not attempt to enforce them either; that is, the constraint is
+    Constraints (both the user-defined constraints such as <literal>CHECK</>
+    or <literal>NOT NULL</> clauses and the partition constraint) are not
+    enforced by the core <productname>PostgreSQL</> system, and most foreign
+    data wrappers do not attempt to enforce them either; that is, they are
     simply assumed to hold true.  There would be little point in such
     enforcement since it would only apply to rows inserted or updated via
     the foreign table, and not to rows modified by other means, such as
     directly on the remote server.  Instead, a constraint attached to a
     foreign table should represent a constraint that is being enforced by
-    the remote server.
+    the remote server.  That becomes especially important if the table is
+    being used in a partition hierarchy, where it is recommended to add
+    a constraint matching the partition constraint expression on
+    the remote table.
    </para>
 
    <para>
-- 
2.11.0

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to