On Wed, Jul 06, 2011 at 10:25:12PM +0200, Kohei KaiGai wrote:
> *** a/src/backend/commands/view.c
> --- b/src/backend/commands/view.c

> --- 227,257 ----
>                               atcmd->def = (Node *) lfirst(c);
>                               atcmds = lappend(atcmds, atcmd);
>                       }
>               }
>   
>               /*
> +              * If optional parameters are specified, we must set options
> +              * using ALTER TABLE SET OPTION internally.
> +              */
> +             if (list_length(options) > 0)
> +             {
> +                     atcmd = makeNode(AlterTableCmd);
> +                     atcmd->subtype = AT_SetRelOptions;
> +                     atcmd->def = (List *)options;
> + 
> +                     atcmds = lappend(atcmds, atcmd);
> +             }
> +             else
> +             {
> +                     atcmd = makeNode(AlterTableCmd);
> +                     atcmd->subtype = AT_ResetRelOptions;
> +                     atcmd->def = (Node *) 
> list_make1(makeDefElem("security_barrier",
> +                                                                             
>                                  NULL));
> +             }
> +             if (atcmds != NIL)
> +                     AlterTableInternal(viewOid, atcmds, true);
> + 
> +             /*
>                * Seems okay, so return the OID of the pre-existing view.
>                */
>               relation_close(rel, NoLock);    /* keep the lock! */

That gets the job done for today, but DefineVirtualRelation() should not need
to know all view options by name to simply replace the existing list with a
new one.  I don't think you can cleanly use the ALTER TABLE SET/RESET code for
this.  Instead, compute an option list similar to how DefineRelation() does so
at tablecmds.c:491, then update pg_class.

> 2011/7/5 Noah Misch <n...@2ndquadrant.com>:
> > On Sun, Jul 03, 2011 at 11:33:38AM +0200, Kohei KaiGai wrote:
> >> --- a/src/test/regress/sql/select_views.sql
> >> +++ b/src/test/regress/sql/select_views.sql

> >> +-- cleanups
> >> +DROP ROLE IF EXISTS alice;
> >> +DROP FUNCTION IF EXISTS f_leak(text);
> >> +DROP TABLE IF EXISTS credit_cards CASCADE;
> >
> > Keep the view around.  That way, pg_dump tests of the regression database 
> > will
> > test the dumping of this view option.  (Your pg_dump support for this 
> > feature
> > does work fine, though.)

The latest version of part 1 still drops everything here.

-- 
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