> Fix CI failure of doc build in v1 patch.

Thanks for the patch! I am +1 for this, but I have a few comments:

1/ In the IDENTITY case, the remote side may not be
able to handle the DEFAULT value. See the example below:

-- on the foreign server
postgres=# CREATE TABLE t2 (id int, c1 text);
CREATE TABLE

-- on the local server
postgres=#
postgres=# CREATE TABLE t1 (id int GENERATED ALWAYS AS IDENTITY, c1 text);
CREATE TABLE
postgres=# CREATE FOREIGN TABLE t2 (LIKE t1 INCLUDING INDEXES) server r1;
CREATE FOREIGN TABLE
postgres=# INSERT INTO t2 (c1) VALUES ('A');
INSERT 0 1
postgres=# SELECT * FROM t2;
 id | c1
----+----
    | A
(1 row)

This is also the reason foreign tables don't document IDENTITY as valid [1].
It may even be a bug for it to be allowed with the CREATE FOREIGN TABLE
syntax:

postgres=# CREATE FOREIGN TABLE t3 (id int GENERATED ALWAYS AS
IDENTITY, c1 text) server r1;
CREATE FOREIGN TABLE
postgres=# \d+ t3
                                                  Foreign table "public.t3"
 Column |  Type   | Collation | Nullable |           Default
 | FDW options | Storage  | Stats target | Description
--------+---------+-----------+----------+------------------------------+-------------+----------+--------------+-------------
 id     | integer |           | not null | generated always as
identity |             | plain    |              |
 c1     | text    |           |          |
 |             | extended |              |
Not-null constraints:
    "t3_id_not_null" NOT NULL "id"
Server: r1

2/  As IDENTITY, STORAGE is also allowed on foreign tables, which
does not make much sense either, as the fdw may not be Postgres,
or if it is Postgres, it may have a different STORAGE setting. This is
also not documented. I am inclined to say to not include it either.

I think we should not allow IDENTITY and STORAGE in this patch
as they are not documented [1] as is, and perhaps a separate discussion
to correct the behavior for the CREATE FOREIGN TABLE case.

3/ a minor nit on the comments.

instead of

+      Foreign tables have no real storage in PostgreSQL.

Can it just be

Foreign tables have no storage in PostgreSQL.

the "real" is not needed.

[1] https://www.postgresql.org/docs/current/sql-createforeigntable.html

--
Regards,

Sami


Reply via email to