postgresql/src/include
Tom Lane 6b71c925cb Prevent ALTER TYPE/DOMAIN/OPERATOR from changing extension membership.
If recordDependencyOnCurrentExtension is invoked on a pre-existing,
free-standing object during an extension update script, that object
will become owned by the extension.  In our current code this is
possible in three cases:

* Replacing a "shell" type or operator.
* CREATE OR REPLACE overwriting an existing object.
* ALTER TYPE SET, ALTER DOMAIN SET, and ALTER OPERATOR SET.

The first of these cases is intentional behavior, as noted by the
existing comments for GenerateTypeDependencies.  It seems like
appropriate behavior for CREATE OR REPLACE too; at least, the obvious
alternatives are not better.  However, the fact that it happens during
ALTER is an artifact of trying to share code (GenerateTypeDependencies
and makeOperatorDependencies) between the CREATE and ALTER cases.
Since an extension script would be unlikely to ALTER an object that
didn't already belong to the extension, this behavior is not very
troubling for the direct target object ... but ALTER TYPE SET will
recurse to dependent domains, and it is very uncool for those to
become owned by the extension if they were not already.

Let's fix this by redefining the ALTER cases to never change extension
membership, full stop.  We could minimize the behavioral change by
only changing the behavior when ALTER TYPE SET is recursing to a
domain, but that would complicate the code and it does not seem like
a better definition.

Per bug #17144 from Alex Kozhemyakin.  Back-patch to v13 where ALTER
TYPE SET was added.  (The other cases are older, but since they only
affect the directly-named object, there's not enough of a problem to
justify changing the behavior further back.)

Discussion: https://postgr.es/m/17144-e67d7a8f049de9af@postgresql.org
2021-08-17 14:29:22 -04:00
..
access Remove unused function declaration 2021-08-08 23:27:57 +12:00
bootstrap process startup: Remove bootstrap / checker modes from AuxProcType. 2021-08-05 12:18:15 -07:00
catalog Prevent ALTER TYPE/DOMAIN/OPERATOR from changing extension membership. 2021-08-17 14:29:22 -04:00
commands Add support for SET ACCESS METHOD in ALTER TABLE 2021-07-28 10:10:44 +09:00
common Adjust locations which have an incorrect copyright year 2021-06-04 12:19:50 +12:00
datatype Update copyright for 2021 2021-01-02 13:06:25 -05:00
executor Change the name of the Result Cache node to Memoize 2021-07-14 12:43:58 +12:00
fe_utils Unify parsing logic for command-line integer options 2021-07-24 18:35:03 +09:00
foreign Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
jit Update copyright for 2021 2021-01-02 13:06:25 -05:00
lib Fix incorrect hash table resizing code in simplehash.h 2021-08-13 16:41:26 +12:00
libpq Refactor SASL code with a generic interface for its mechanisms 2021-07-07 10:55:15 +09:00
mb Fix incautious handling of possibly-miscoded strings in client code. 2021-06-07 14:15:25 -04:00
nodes Change NestPath node to contain JoinPath node 2021-08-08 18:46:34 +02:00
optimizer Change the name of the Result Cache node to Memoize 2021-07-14 12:43:58 +12:00
parser Cleanup some aggregate code in the executor 2021-07-04 18:47:31 +12:00
partitioning Allow ordered partition scans in more cases 2021-08-03 12:25:52 +12:00
port Use direct function calls for pg_popcount{32,64} on non-x86 platforms 2021-08-16 11:51:15 -04:00
portability Fix another portability bug in recent pgbench commit. 2021-03-10 23:20:41 +13:00
postmaster Remove support for background workers without BGWORKER_SHMEM_ACCESS. 2021-08-13 05:49:26 -07:00
regex Avoid determining regexp subexpression matches, when possible. 2021-08-09 11:26:34 -04:00
replication Add prepare API support for streaming transactions in logical replication. 2021-08-04 07:47:06 +05:30
rewrite Adjust locations which have an incorrect copyright year 2021-06-04 12:19:50 +12:00
snowball Update snowball 2021-02-19 08:10:15 +01:00
statistics Extended statistics on expressions 2021-03-27 00:01:11 +01:00
storage Add RISC-V spinlock support in s_lock.h. 2021-08-13 13:59:43 -04:00
tcop Centralize the logic for protective copying of utility statements. 2021-06-18 11:22:58 -04:00
tsearch Don't leak compiled regex(es) when an ispell cache entry is dropped. 2021-03-18 22:22:47 -04:00
utils Let regexp_replace() make use of REG_NOSUB when feasible. 2021-08-09 20:53:25 -04:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Work around issues in MinGW-64's setjmp/longjmp support. 2021-03-15 12:34:17 -04:00
fmgr.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
funcapi.h Reconsider the handling of procedure OUT parameters. 2021-06-10 17:11:36 -04:00
getaddrinfo.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
getopt_long.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
Makefile Build in some knowledge about foreign-key relationships in the catalogs. 2021-02-02 17:11:55 -05:00
miscadmin.h process startup: Remove bootstrap / checker modes from AuxProcType. 2021-08-05 12:18:15 -07:00
pg_config.h.in Portability fixes for sigwait. 2021-07-15 12:34:31 +12:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_manual.h Rename debug_invalidate_system_caches_always to debug_discard_caches. 2021-07-13 15:01:01 -04:00
pg_getopt.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_trace.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgstat.h Revert analyze support for partitioned tables 2021-08-16 17:27:52 -04:00
pgtar.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgtime.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
port.h Move bsearch_arg to src/port 2021-03-23 00:11:22 +01:00
postgres.h Mostly-cosmetic adjustments of TOAST-related macros. 2021-03-22 13:43:10 -04:00
postgres_ext.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
postgres_fe.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
rusagestub.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
windowapi.h Update copyright for 2021 2021-01-02 13:06:25 -05:00