Hi Mark,

v9 applies cleanly on current master (f7700080dc4), and make check, the
TAP suites under src/bin and contrib check pass here.  No objections to
the code; what follows is what I verified and a few small things.

1. Every existing call form behaves the same as before.  I ran one
script against an unpatched build and a v9 build of the same base
commit: the one-, two- and three-argument calls of the six functions
(pg_get_viewdef by name, by oid and with wrap_column included, plus the
unknown-literal and NULL cases and the "is not unique" error for
pg_get_viewdef(oid, NULL)), pg_indexes/pg_rules/pg_views,
information_schema.columns and check_constraints, \d output and
schema-only pg_dump output are byte-identical between the two builds.
Views defined over the one-argument forms deparse identically as well:
the parser doesn't store default arguments in the FuncExpr, so
pg_get_viewdef of such a view still prints pg_get_viewdef(c.oid).  What
is new is pg_get_indexdef(index, column) with just two arguments, and
named notation such as pg_get_viewdef(view => 'v', pretty => true).

2. pg_upgrade from an unpatched cluster works for views over these
functions: afterwards the view trees reference pg_proc OIDs
2504/2505/2506 instead of 1573/1640/1641, and the views return the same
rows as before the upgrade.  For the case Fujii described, a GRANT on
pg_get_ruledef(oid) in the old cluster, pg_upgrade --check reports
"Clusters are compatible" and the upgrade then fails in the restore
step:

  pg_restore: error: could not execute query: ERROR:  function
pg_catalog.pg_get_ruledef(oid) does not exist
  Command was: REVOKE ALL ON FUNCTION
"pg_catalog"."pg_get_ruledef"("oid") FROM PUBLIC;

pg_dump only emits ACLs for pg_catalog functions that differ from
pg_init_privs, so this needs someone to have changed the privileges of
one of the removed signatures.

3. Smaller things:

* The six commit subjects still say "in system_functions.sql"; since v4
  the patches set proargdefaults in pg_proc.dat and don't touch
  system_functions.sql.

* reformat_dat_file.pl moves descr back onto the "{ oid =>" line for
  2505, 2506, 2507 and 2509 now that the descriptions are shorter.  (It
  also reformats uuid_larger/uuid_smaller, but that is pre-existing on
  master.)

* func-info.sgml has pg_get_indexdef ( index oid [, column integer,
  pretty boolean ] ); with the defaults, column can be given without
  pretty, so [, column integer [, pretty boolean ] ] would describe it.

* For C callers: the _ext symbols go away and the fmgroids.h macros
  lose their type suffixes (F_PG_GET_EXPR_PG_NODE_TREE_OID_BOOL becomes
  F_PG_GET_EXPR).  A DirectFunctionCall2(pg_get_expr, ...) in extension
  code still compiles and then reads past the end of its
  FunctionCallInfo, which is what the sanitizer caught in tablecmds.c
  in v1.

Regards,
Rui


Reply via email to