mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Remove pg_authid's TOAST table.
pg_authid's only varlena column is rolpassword, which unfortunately cannot be de-TOASTed during authentication because we haven't selected a database yet and cannot read pg_class. By removing pg_authid's TOAST table, attempts to set password hashes that require out-of-line storage will fail with a "row is too big" error instead. We may want to provide a more user-friendly error in the future, but for now let's just remove the useless TOAST table. Bumps catversion. Reported-by: Alexander Lakhin Reviewed-by: Tom Lane, Michael Paquier Discussion: https://postgr.es/m/89e8649c-eb74-db25-7945-6d6b23992394%40gmail.com
This commit is contained in:
parent
c4d5cb71d2
commit
6aa44060a3
@ -300,9 +300,7 @@ IsSharedRelation(Oid relationId)
|
|||||||
relationId == TablespaceOidIndexId)
|
relationId == TablespaceOidIndexId)
|
||||||
return true;
|
return true;
|
||||||
/* These are their toast tables and toast indexes */
|
/* These are their toast tables and toast indexes */
|
||||||
if (relationId == PgAuthidToastTable ||
|
if (relationId == PgDatabaseToastTable ||
|
||||||
relationId == PgAuthidToastIndex ||
|
|
||||||
relationId == PgDatabaseToastTable ||
|
|
||||||
relationId == PgDatabaseToastIndex ||
|
relationId == PgDatabaseToastIndex ||
|
||||||
relationId == PgDbRoleSettingToastTable ||
|
relationId == PgDbRoleSettingToastTable ||
|
||||||
relationId == PgDbRoleSettingToastIndex ||
|
relationId == PgDbRoleSettingToastIndex ||
|
||||||
|
@ -57,6 +57,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 202409182
|
#define CATALOG_VERSION_NO 202409211
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,8 +55,6 @@ CATALOG(pg_authid,1260,AuthIdRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(284
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_authid *Form_pg_authid;
|
typedef FormData_pg_authid *Form_pg_authid;
|
||||||
|
|
||||||
DECLARE_TOAST_WITH_MACRO(pg_authid, 4175, 4176, PgAuthidToastTable, PgAuthidToastIndex);
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, AuthIdRolnameIndexId, pg_authid, btree(rolname name_ops));
|
DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, AuthIdRolnameIndexId, pg_authid, btree(rolname name_ops));
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, AuthIdOidIndexId, pg_authid, btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, AuthIdOidIndexId, pg_authid, btree(oid oid_ops));
|
||||||
|
|
||||||
|
@ -2664,10 +2664,10 @@ REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation
|
|||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index
|
REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
-- These are the toast table and index of pg_authid.
|
-- These are the toast table and index of pg_database.
|
||||||
REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1260; -- no catalog toast table
|
REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1262; -- no catalog toast table
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index
|
REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1262_index; -- no catalog toast index
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM
|
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
@ -2974,10 +2974,10 @@ ERROR: must be owner of schema schema_to_reindex
|
|||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
GRANT USAGE ON SCHEMA pg_toast TO regress_reindexuser;
|
GRANT USAGE ON SCHEMA pg_toast TO regress_reindexuser;
|
||||||
SET SESSION ROLE regress_reindexuser;
|
SET SESSION ROLE regress_reindexuser;
|
||||||
REINDEX TABLE pg_toast.pg_toast_1260;
|
REINDEX TABLE pg_toast.pg_toast_1262;
|
||||||
ERROR: permission denied for table pg_toast_1260
|
ERROR: permission denied for table pg_toast_1262
|
||||||
REINDEX INDEX pg_toast.pg_toast_1260_index;
|
REINDEX INDEX pg_toast.pg_toast_1262_index;
|
||||||
ERROR: permission denied for index pg_toast_1260_index
|
ERROR: permission denied for index pg_toast_1262_index
|
||||||
-- Clean up
|
-- Clean up
|
||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
REVOKE USAGE ON SCHEMA pg_toast FROM regress_reindexuser;
|
REVOKE USAGE ON SCHEMA pg_toast FROM regress_reindexuser;
|
||||||
|
@ -40,6 +40,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR
|
|||||||
-- 2. pg_largeobject and pg_largeobject_metadata. Large object catalogs
|
-- 2. pg_largeobject and pg_largeobject_metadata. Large object catalogs
|
||||||
-- and toast tables are mutually exclusive and large object data is handled
|
-- and toast tables are mutually exclusive and large object data is handled
|
||||||
-- as user data by pg_upgrade, which would cause failures.
|
-- as user data by pg_upgrade, which would cause failures.
|
||||||
|
-- 3. pg_authid, since its toast table cannot be accessed when it would be
|
||||||
|
-- needed, i.e., during authentication before we've selected a database.
|
||||||
SELECT relname, attname, atttypid::regtype
|
SELECT relname, attname, atttypid::regtype
|
||||||
FROM pg_class c JOIN pg_attribute a ON c.oid = attrelid
|
FROM pg_class c JOIN pg_attribute a ON c.oid = attrelid
|
||||||
WHERE c.oid < 16384 AND
|
WHERE c.oid < 16384 AND
|
||||||
@ -53,12 +55,13 @@ ORDER BY 1, 2;
|
|||||||
pg_attribute | attfdwoptions | text[]
|
pg_attribute | attfdwoptions | text[]
|
||||||
pg_attribute | attmissingval | anyarray
|
pg_attribute | attmissingval | anyarray
|
||||||
pg_attribute | attoptions | text[]
|
pg_attribute | attoptions | text[]
|
||||||
|
pg_authid | rolpassword | text
|
||||||
pg_class | relacl | aclitem[]
|
pg_class | relacl | aclitem[]
|
||||||
pg_class | reloptions | text[]
|
pg_class | reloptions | text[]
|
||||||
pg_class | relpartbound | pg_node_tree
|
pg_class | relpartbound | pg_node_tree
|
||||||
pg_largeobject | data | bytea
|
pg_largeobject | data | bytea
|
||||||
pg_largeobject_metadata | lomacl | aclitem[]
|
pg_largeobject_metadata | lomacl | aclitem[]
|
||||||
(9 rows)
|
(10 rows)
|
||||||
|
|
||||||
-- system catalogs without primary keys
|
-- system catalogs without primary keys
|
||||||
--
|
--
|
||||||
|
@ -51,13 +51,13 @@ ERROR: cannot move system relation "pg_authid_rolname_index"
|
|||||||
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_authid;
|
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_authid;
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
-- toast relations, fail
|
-- toast relations, fail
|
||||||
REINDEX (TABLESPACE regress_tblspace) INDEX pg_toast.pg_toast_1260_index;
|
REINDEX (TABLESPACE regress_tblspace) INDEX pg_toast.pg_toast_1262_index;
|
||||||
ERROR: cannot move system relation "pg_toast_1260_index"
|
ERROR: cannot move system relation "pg_toast_1262_index"
|
||||||
REINDEX (TABLESPACE regress_tblspace) INDEX CONCURRENTLY pg_toast.pg_toast_1260_index;
|
REINDEX (TABLESPACE regress_tblspace) INDEX CONCURRENTLY pg_toast.pg_toast_1262_index;
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
REINDEX (TABLESPACE regress_tblspace) TABLE pg_toast.pg_toast_1260;
|
REINDEX (TABLESPACE regress_tblspace) TABLE pg_toast.pg_toast_1262;
|
||||||
ERROR: cannot move system relation "pg_toast_1260_index"
|
ERROR: cannot move system relation "pg_toast_1262_index"
|
||||||
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_toast.pg_toast_1260;
|
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_toast.pg_toast_1262;
|
||||||
ERROR: cannot reindex system catalogs concurrently
|
ERROR: cannot reindex system catalogs concurrently
|
||||||
-- system catalog, fail
|
-- system catalog, fail
|
||||||
REINDEX (TABLESPACE pg_global) TABLE pg_authid;
|
REINDEX (TABLESPACE pg_global) TABLE pg_authid;
|
||||||
|
@ -1126,9 +1126,9 @@ REINDEX TABLE CONCURRENTLY concur_reindex_tab;
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation
|
REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation
|
||||||
REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index
|
REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index
|
||||||
-- These are the toast table and index of pg_authid.
|
-- These are the toast table and index of pg_database.
|
||||||
REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1260; -- no catalog toast table
|
REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1262; -- no catalog toast table
|
||||||
REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index
|
REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1262_index; -- no catalog toast index
|
||||||
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM
|
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM
|
||||||
REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto
|
REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto
|
||||||
REINDEX (CONCURRENTLY) SYSTEM; -- ditto
|
REINDEX (CONCURRENTLY) SYSTEM; -- ditto
|
||||||
@ -1305,8 +1305,8 @@ REINDEX SCHEMA schema_to_reindex;
|
|||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
GRANT USAGE ON SCHEMA pg_toast TO regress_reindexuser;
|
GRANT USAGE ON SCHEMA pg_toast TO regress_reindexuser;
|
||||||
SET SESSION ROLE regress_reindexuser;
|
SET SESSION ROLE regress_reindexuser;
|
||||||
REINDEX TABLE pg_toast.pg_toast_1260;
|
REINDEX TABLE pg_toast.pg_toast_1262;
|
||||||
REINDEX INDEX pg_toast.pg_toast_1260_index;
|
REINDEX INDEX pg_toast.pg_toast_1262_index;
|
||||||
|
|
||||||
-- Clean up
|
-- Clean up
|
||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
|
@ -43,6 +43,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR
|
|||||||
-- 2. pg_largeobject and pg_largeobject_metadata. Large object catalogs
|
-- 2. pg_largeobject and pg_largeobject_metadata. Large object catalogs
|
||||||
-- and toast tables are mutually exclusive and large object data is handled
|
-- and toast tables are mutually exclusive and large object data is handled
|
||||||
-- as user data by pg_upgrade, which would cause failures.
|
-- as user data by pg_upgrade, which would cause failures.
|
||||||
|
-- 3. pg_authid, since its toast table cannot be accessed when it would be
|
||||||
|
-- needed, i.e., during authentication before we've selected a database.
|
||||||
|
|
||||||
SELECT relname, attname, atttypid::regtype
|
SELECT relname, attname, atttypid::regtype
|
||||||
FROM pg_class c JOIN pg_attribute a ON c.oid = attrelid
|
FROM pg_class c JOIN pg_attribute a ON c.oid = attrelid
|
||||||
|
@ -40,10 +40,10 @@ REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_am;
|
|||||||
REINDEX (TABLESPACE regress_tblspace) TABLE pg_authid;
|
REINDEX (TABLESPACE regress_tblspace) TABLE pg_authid;
|
||||||
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_authid;
|
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_authid;
|
||||||
-- toast relations, fail
|
-- toast relations, fail
|
||||||
REINDEX (TABLESPACE regress_tblspace) INDEX pg_toast.pg_toast_1260_index;
|
REINDEX (TABLESPACE regress_tblspace) INDEX pg_toast.pg_toast_1262_index;
|
||||||
REINDEX (TABLESPACE regress_tblspace) INDEX CONCURRENTLY pg_toast.pg_toast_1260_index;
|
REINDEX (TABLESPACE regress_tblspace) INDEX CONCURRENTLY pg_toast.pg_toast_1262_index;
|
||||||
REINDEX (TABLESPACE regress_tblspace) TABLE pg_toast.pg_toast_1260;
|
REINDEX (TABLESPACE regress_tblspace) TABLE pg_toast.pg_toast_1262;
|
||||||
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_toast.pg_toast_1260;
|
REINDEX (TABLESPACE regress_tblspace) TABLE CONCURRENTLY pg_toast.pg_toast_1262;
|
||||||
-- system catalog, fail
|
-- system catalog, fail
|
||||||
REINDEX (TABLESPACE pg_global) TABLE pg_authid;
|
REINDEX (TABLESPACE pg_global) TABLE pg_authid;
|
||||||
REINDEX (TABLESPACE pg_global) TABLE CONCURRENTLY pg_authid;
|
REINDEX (TABLESPACE pg_global) TABLE CONCURRENTLY pg_authid;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user