]> granicus.if.org Git - postgresql/commitdiff
In plpgsql, allow foreign tables to define row types.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Nov 2011 23:49:15 +0000 (18:49 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Nov 2011 23:49:15 +0000 (18:49 -0500)
This seems to have been just an oversight in previous foreign-table work.
A quick grep didn't turn up any other places where RELKIND_FOREIGN_TABLE
was obviously omitted.

One change noted by Alexander Soudakov, the other by me.
Back-patch to 9.1.

src/pl/plpgsql/src/pl_comp.c

index 75098ec6deb21a70dc49c13544e95c3b99a4ded4..79ff6f57669610b581111f1de3d8a61492852a37 100644 (file)
@@ -1721,12 +1721,13 @@ plpgsql_parse_cwordtype(List *idents)
        classStruct = (Form_pg_class) GETSTRUCT(classtup);
 
        /*
-        * It must be a relation, sequence, view, or type
+        * It must be a relation, sequence, view, composite type, or foreign table
         */
        if (classStruct->relkind != RELKIND_RELATION &&
                classStruct->relkind != RELKIND_SEQUENCE &&
                classStruct->relkind != RELKIND_VIEW &&
-               classStruct->relkind != RELKIND_COMPOSITE_TYPE)
+               classStruct->relkind != RELKIND_COMPOSITE_TYPE &&
+               classStruct->relkind != RELKIND_FOREIGN_TABLE)
                goto done;
 
        /*
@@ -1947,11 +1948,12 @@ build_row_from_class(Oid classOid)
        classStruct = RelationGetForm(rel);
        relname = RelationGetRelationName(rel);
 
-       /* accept relation, sequence, view, or composite type entries */
+       /* accept relation, sequence, view, composite type, or foreign table */
        if (classStruct->relkind != RELKIND_RELATION &&
                classStruct->relkind != RELKIND_SEQUENCE &&
                classStruct->relkind != RELKIND_VIEW &&
-               classStruct->relkind != RELKIND_COMPOSITE_TYPE)
+               classStruct->relkind != RELKIND_COMPOSITE_TYPE &&
+               classStruct->relkind != RELKIND_FOREIGN_TABLE)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("relation \"%s\" is not a table", relname)));