Previous regression tests are unstable for repetitive execution.
These instability comes from mainly from unwanted auto vacuums and
locks unrelated to the test. So fix these factors of the instability
and tidied up the code.
DROP ROLE IF EXISTS regular_user;
CREATE ROLE regular_user LOGIN;
SET client_min_messages = fatal;
-CREATE ROLE postgres SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
+DROP ROLE IF EXISTS super_user;
+CREATE ROLE super_user SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
-- create object
CREATE TABLE pt0(id integer, day date);
CREATE INDEX pt0_idx ON pt0(id);
r double precision,
i double precision
);
+-- updating _relation_stats_locked leads to merged stats caches
+-- See StatsCacheRelCallback() in pg_dbms_stats.c for details.
+CREATE FUNCTION reset_stat_and_cache() RETURNS void AS $$
+ UPDATE dbms_stats._relation_stats_locked SET relpages = relpages;
+ SELECT pg_stat_reset();
+$$
+LANGUAGE sql;
CREATE FUNCTION inform(VARIADIC arr text[]) RETURNS int AS $$
DECLARE
str text := 'arguments are ';
RETURN 1;
END;
$$LANGUAGE plpgsql;
+-- Table or index fetches will take place if stats merge performed.
CREATE VIEW lockd_io AS
SELECT relname,
- heap_blks_read + heap_blks_hit > 0 hb_fetch,
- idx_blks_read + idx_blks_hit > 0 ib_fetch
+ heap_blks_read + heap_blks_hit +
+ idx_blks_read + idx_blks_hit > 0 fetches
FROM pg_statio_user_tables
WHERE schemaname = 'dbms_stats'
- AND relname LIKE '%stats_locked'
+ AND relname LIKE '\_%\_stats_locked'
ORDER BY relid;
+CREATE VIEW internal_locks AS
+ SELECT relation::regclass, mode
+ FROM pg_locks
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
-- load data
INSERT INTO st0 VALUES (1, 'test'), (2, 'test');
INSERT INTO st1 SELECT i % 3, i % 3 FROM generate_series(1, 10000) t(i);
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
is_target_relkind
-------------------
+ t
+ t
f
-(1 row)
+ f
+ f
+ f
+ f
+ f
+(8 rows)
/*
* No.7-1 dbms_stats.backup
0
(1 row)
--- No.7-1-11
+-- No.7-1-10
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats.relation_stats_backup;
+-- SELECT dbms_stats.backup(1, 's0.smv0'::regclass, NULL);
+-- SELECT count(*) FROM dbms_stats.relation_stats_backup;
+-- SELECT count(*) FROM dbms_stats.column_stats_backup;
+-- No.7-1-12
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL, 1::int2);
backup
st1_exp | 1
(7 rows)
--- No.7-1-13
+-- No.7-1-14
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL::regclass, NULL);
backup
st1_exp | 1
(13 rows)
--- No.7-1-17
+-- No.7-1-18
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(NULL, 's0.st0'::regclass, NULL);
ERROR: null value in column "id" violates not-null constraint
(0 rows)
-- No.8-1-12
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats.backup_history;
+-- SELECT dbms_stats.backup('s0.smv0'::regclass, NULL, 'dummy comment');
+-- SELECT id, unit, comment FROM dbms_stats.backup_history;
+-- No.8-1-13
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('pg_catalog.pg_class'::regclass, NULL, 'dummy comment');
ERROR: backing up statistics is inhibited for system catalogs: "pg_class"
----+------+---------
(0 rows)
--- No.8-1-13
+-- No.8-1-14
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('s0.st0'::regclass, 'dummy', 'dummy comment');
ERROR: column "dummy" not found in relation "s0.st0"
----+------+---------
(0 rows)
--- No.8-1-14
+-- No.8-1-15
DELETE FROM dbms_stats.backup_history;
DELETE FROM pg_statistic
WHERE starelid = 's0.st0'::regclass
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.restore(2, 's0.st0', NULL);
restore
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
(8 rows)
COMMIT;
WHERE id = 2
AND relname = 's0.sft0';
-- No.9-1-22
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- INSERT INTO dbms_stats.relation_stats_backup(
+-- id, relid, relname, relpages, reltuples,
+-- relallvisible,
+-- curpages)
+-- VALUES (3, 's0.smv0'::regclass, 's0.smv0', 1, 1,
+-- 1,
+-- 1);
+-- SELECT * FROM relations_backup_v
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+-- SELECT dbms_stats.restore(2, 's0.smv0', NULL);
+-- SELECT count(*) FROM dbms_stats.column_stats_locked;
+-- SELECT count(*) FROM dbms_stats.relation_stats_locked;
+-- DELETE FROM dbms_stats.relation_stats_backup
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+-- No.9-1-23
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats.relation_stats_backup(
id, relid, relname, relpages, reltuples,
DELETE FROM dbms_stats.relation_stats_backup
WHERE id = 2
AND relname = 'pg_catalog.pg_class';
--- No.9-1-23
+-- No.9-1-24
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats._relation_stats_locked(relid, relname)
VALUES ('s0.st0'::regclass, 's0.st0');
s0.st0 | 2 | num | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 97 | 97 | 0 | 0 | (null) | {1} | (null) | (null) | {10,20,40,50,60} | (null) | (null) | (null)
(4 rows)
--- No.9-1-24
+-- No.9-1-25
DELETE FROM dbms_stats._relation_stats_locked;
SELECT id, unit, comment FROM dbms_stats.backup_history
WHERE id = 2;
ERROR: backup id 0 not found
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.restore_stats(2);
restore_stats
st1_idx
(13 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
(8 rows)
COMMIT;
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.sft0', 'id');
ERROR: "s0.sft0" must be a table or an index
+SELECT * FROM relations_locked_v;
+ relid | relname | relpages | reltuples | curpages
+-------+---------+----------+-----------+----------
+(0 rows)
+
+SELECT * FROM columns_locked_v c;
+ starelid | staattnum | attname | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | staop1 | staop2 | staop3 | staop4 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stavalues1 | stavalues2 | stavalues3 | stavalues4
+----------+-----------+---------+------------+-------------+----------+-------------+----------+----------+----------+----------+--------+--------+--------+--------+-------------+-------------+-------------+-------------+------------+------------+------------+------------
+(0 rows)
+
-- No.11-1-13
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0', 'id');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
+-- No.11-1-14
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class', 'id');
ERROR: locking statistics is inhibited for system catalogs: "pg_class"
--- No.11-1-14
+-- No.11-1-15
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0', 'dummy');
ERROR: column "dummy" not found in relation "s0.st0"
--- No.11-1-15
+-- No.11-1-16
DELETE FROM dbms_stats._relation_stats_locked;
DELETE FROM pg_statistic
WHERE starelid = 's0.st0'::regclass;
SELECT dbms_stats.lock('s0.st0', 'id');
ERROR: no statistics available for column "id" of relation "s0.st0"
VACUUM ANALYZE;
--- No.11-1-16
+-- No.11-1-17
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats._relation_stats_locked(
relid, relname, relpages, reltuples,
s0.st0 | 1 | id | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 97 | 97 | 0 | 0 | (null) | {1} | (null) | (null) | {1,2,4,5,6} | (null) | (null) | (null)
(2 rows)
--- No.11-1-17
+-- No.11-1-18
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0', 'id');
lock
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.lock('s0.st0');
lock
s0.st0 | 2 | num | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 97 | 97 | 0 | 0 | (null) | {1} | (null) | (null) | {10,20,40,50,60} | (null) | (null) | (null)
(4 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(8 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(7 rows)
COMMIT;
-- No.11-2-2
SELECT dbms_stats.lock('s0.sft0');
ERROR: locking statistics is not allowed for relations with relkind "f": "s0.sft0"
HINT: Only tables(r) and indexes(i) are lockable.
+SELECT * FROM relations_locked_v;
+ relid | relname | relpages | reltuples | curpages
+-------+---------+----------+-----------+----------
+(0 rows)
+
+SELECT * FROM columns_locked_v c;
+ starelid | staattnum | attname | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | staop1 | staop2 | staop3 | staop4 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stavalues1 | stavalues2 | stavalues3 | stavalues4
+----------+-----------+---------+------------+-------------+----------+-------------+----------+----------+----------+----------+--------+--------+--------+--------+-------------+-------------+-------------+-------------+------------+------------+------------+------------
+(0 rows)
+
-- No.11-2-10
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
+-- No.11-2-11
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class');
ERROR: locking statistics is not allowed for system catalogs: "pg_class"
--- No.11-2-11
+-- No.11-2-12
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock_table_stats('s0.st0');
lock_table_stats
s0.st0 | 2 | num | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 97 | 97 | 0 | 0 | (null) | {1} | (null) | (null) | {10,20,40,50,60} | (null) | (null) | (null)
(4 rows)
--- No.11-2-12
+-- No.11-2-13
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0');
lock
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
(0 rows)
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock();
unlock
s1.st0
(14 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_database_stats();
unlock_database_stats
s1.st0
(14 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(7 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_schema_stats('s0');
unlock_schema_stats
s0.st2_idx
(6 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(7 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_table_stats('s0.st0');
unlock_table_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(7 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(4 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(7 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_table_stats('s0', 'st0');
unlock_table_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(7 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(4 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(15 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
unlock_column_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(5 rows)
+(3 rows)
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(15 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
unlock_column_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(5 rows)
+(3 rows)
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
is_target_relkind
-------------------
t
-(1 row)
+ t
+ t
+ f
+ f
+ f
+ f
+ f
+(8 rows)
/*
* No.7-1 dbms_stats.backup
1
(1 row)
+-- No.7-1-10
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats.relation_stats_backup;
+-- SELECT dbms_stats.backup(1, 's0.smv0'::regclass, NULL);
+-- SELECT count(*) FROM dbms_stats.relation_stats_backup;
+-- SELECT count(*) FROM dbms_stats.column_stats_backup;
-- No.7-1-12
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL, 1::int2);
6 | t | dummy comment
(1 row)
+-- No.8-1-12
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats.backup_history;
+-- SELECT dbms_stats.backup('s0.smv0'::regclass, NULL, 'dummy comment');
+-- SELECT id, unit, comment FROM dbms_stats.backup_history;
-- No.8-1-13
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('pg_catalog.pg_class'::regclass, NULL, 'dummy comment');
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(8 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
DELETE FROM dbms_stats.relation_stats_backup
WHERE id = 3
AND relname = 's0.sft0';
+-- No.9-1-22
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- INSERT INTO dbms_stats.relation_stats_backup(
+-- id, relid, relname, relpages, reltuples,
+-- relallvisible,
+-- curpages)
+-- VALUES (3, 's0.smv0'::regclass, 's0.smv0', 1, 1,
+-- 1,
+-- 1);
+-- SELECT * FROM relations_backup_v
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+-- SELECT dbms_stats.restore(2, 's0.smv0', NULL);
+-- SELECT count(*) FROM dbms_stats.column_stats_locked;
+-- SELECT count(*) FROM dbms_stats.relation_stats_locked;
+-- DELETE FROM dbms_stats.relation_stats_backup
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
-- No.9-1-23
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats.relation_stats_backup(
ERROR: backup id 0 not found
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
st1_idx
(14 rows)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(8 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
s0.sft0 | 1 | id | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | (null) | {1} | (null) | (null) | (null) | {1,2,3,4,5,6,7,8,9,10} | (null) | (null) | (null) | (null)
(1 row)
+-- No.11-1-13
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0', 'id');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
-- No.11-1-14
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class', 'id');
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0 | 2 | num | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | (null) | {1} | (null) | (null) | (null) | {10,20,40,50,60} | (null) | (null) | (null) | (null)
(4 rows)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | AccessShareLock
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(7 rows)
COMMIT;
-- No.11-2-2
s0.sft0 | 1 | id | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | (null) | {1} | (null) | (null) | (null) | {1,2,3,4,5,6,7,8,9,10} | (null) | (null) | (null) | (null)
(1 row)
+-- No.11-2-10
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
-- No.11-2-11
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class');
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
(0 rows)
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s1.st0
(15 rows)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s1.st0
(15 rows)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(8 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.sft0
(7 rows)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
-(4 rows)
+(5 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(8 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(8 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(16 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(16 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
----------+------
(0 rows)
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
is_target_relkind
-------------------
t
-(1 row)
-
--- No.6-4-11
-SELECT dbms_stats.is_target_relkind('m');
- is_target_relkind
--------------------
t
-(1 row)
+ t
+ t
+ f
+ f
+ f
+ f
+(8 rows)
/*
* No.7-1 dbms_stats.backup
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.restore(2, 's0.st0', NULL);
restore
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
(8 rows)
COMMIT;
ERROR: backup id 0 not found
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.restore_stats(2);
restore_stats
st1_idx
(15 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.column_stats_backup | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
(8 rows)
COMMIT;
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.lock('s0.st0');
lock
s0.st0 | 2 | num | t | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | (null) | {1} | (null) | (null) | (null) | {10,20,40,50,60} | (null) | (null) | (null) | (null)
(4 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(8 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | AccessShareLock
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | RowShareLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(7 rows)
COMMIT;
-- No.11-2-2
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
(0 rows)
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
starelid | staattnum
----------+-----------
st0 | 1
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock();
unlock
s1.st0
(16 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(1 row)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_database_stats();
unlock_database_stats
s1.st0
(16 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(9 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_schema_stats('s0');
unlock_schema_stats
s0.smv0
(8 rows)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
relation | mode
-----------------------------------+--------------------------
dbms_stats._column_stats_locked | RowExclusiveLock
dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | AccessShareLock
dbms_stats._relation_stats_locked | RowExclusiveLock
dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+(5 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(9 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_table_stats('s0.st0');
unlock_table_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(7 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(4 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(9 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_table_stats('s0', 'st0');
unlock_table_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._relation_stats_locked_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(7 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | RowExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(4 rows)
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(19 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
unlock_column_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
---------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(3 rows)
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
lock_database_stats
---------------------
(19 rows)
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+SELECT * FROM internal_locks;
+ relation | mode
+----------+------
+(0 rows)
SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
unlock_column_stats
s0.st0
(1 row)
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
---------------------------------------+--------------------------
- dbms_stats._column_stats_locked | RowExclusiveLock
- dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
- dbms_stats._column_stats_locked_pkey | RowExclusiveLock
- dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(6 rows)
+SELECT * FROM internal_locks;
+ relation | mode
+-----------------------------------+--------------------------
+ dbms_stats._column_stats_locked | RowExclusiveLock
+ dbms_stats._column_stats_locked | ShareUpdateExclusiveLock
+ dbms_stats._relation_stats_locked | ShareUpdateExclusiveLock
+(3 rows)
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
(1 row)
UPDATE dbms_stats._relation_stats_locked SET curpages = 10000;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
-- No.3-1-1
SET pg_dbms_stats.use_locked_stats TO ON;
EXPLAIN (costs false) SELECT * FROM s0.st2 WHERE id < 1;
(2 rows)
-- clean up
-\c - postgres
+\c - super_user
DELETE FROM dbms_stats._relation_stats_locked;
/*
* No.4-1 DATA TYPE dbms_stats.anyarray
(1 row)
/*
- * No.5-2 dbms_stats.invalidate_column_cache
+ * No.5-2 invalid calls of dbms_stats.invalidate_column_cache
*/
-- No.5-2-1
SELECT dbms_stats.invalidate_column_cache();
WHERE starelid = 'st1'::regclass
AND staattnum = 1
AND stainherit = false;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
QUERY PLAN
-------------------------
UPDATE dbms_stats._relation_stats_locked SET curpages = 1
WHERE relid = 'st1'::regclass;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
QUERY PLAN
-------------------------
(1 row)
-SELECT pg_stat_reset();
- pg_stat_reset
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
(1 row)
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
UPDATE dbms_stats._relation_stats_locked SET curpages = 1000
WHERE relid = 'st1_exp'::regclass;
SELECT pg_sleep(0.5);
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | t
- _column_stats_locked | f | f
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | f
(2 rows)
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
+
+(1 row)
+
SELECT relname, curpages FROM dbms_stats.relation_stats_locked
WHERE relid = 'st1'::regclass;
relname | curpages
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | t | t
- _column_stats_locked | f | f
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | f
(2 rows)
/*
-- No.5-4-1
UPDATE dbms_stats._relation_stats_locked SET curpages = 1
WHERE relid = 'st1'::regclass;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
QUERY PLAN
-------------------------
(1 row)
-SELECT pg_stat_reset();
- pg_stat_reset
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
(1 row)
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | f
- _column_stats_locked | f | f
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | f
+ _column_stats_locked | f
(2 rows)
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
+
+(1 row)
+
SELECT * FROM s0.test
WHERE id = 1;
id
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | t
- _column_stats_locked | f | t
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | t
(2 rows)
ALTER TABLE s0.test RENAME TO droptest;
(1 row)
-SELECT pg_stat_reset();
- pg_stat_reset
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
(1 row)
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | f
- _column_stats_locked | f | f
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | f
+ _column_stats_locked | f
(2 rows)
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
+
+(1 row)
+
SELECT * FROM s0.droptest
WHERE test = 1;
test
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | t
- _column_stats_locked | f | t
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | t
(2 rows)
ALTER TABLE s0.droptest RENAME test TO id;
(1 row)
-SELECT pg_stat_reset();
- pg_stat_reset
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
(1 row)
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | f
- _column_stats_locked | f | f
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | f
+ _column_stats_locked | f
(2 rows)
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
+
+(1 row)
+
SELECT * FROM s0.droptest
WHERE id = 1;
id
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | f | t
- _column_stats_locked | f | t
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | t
(2 rows)
-- No.5-4-9
(1 row)
-SELECT pg_stat_reset();
- pg_stat_reset
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
(1 row)
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | t | t
- _column_stats_locked | t | t
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | t
(2 rows)
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache
+----------------------
+
+(1 row)
+
SELECT * FROM s0.droptest
WHERE id = 4;
id
(1 row)
SELECT * FROM lockd_io;
- relname | hb_fetch | ib_fetch
-------------------------+----------+----------
- _relation_stats_locked | t | t
- _column_stats_locked | t | t
+ relname | fetches
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked | t
(2 rows)
-- clean up
BEGIN;
SELECT relation::regclass, mode
FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
-----------+---------------
- (null) | ExclusiveLock
-(1 row)
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
+ relation | mode
+----------+------
+(0 rows)
SELECT id, unit, comment FROM dbms_stats.purge_stats(2);
id | unit | comment
SELECT relation::regclass, mode
FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
- relation | mode
----------------------------------------+--------------------------
- dbms_stats.backup_history | RowExclusiveLock
- dbms_stats.backup_history | ShareUpdateExclusiveLock
- dbms_stats.backup_history_pkey | RowExclusiveLock
- dbms_stats.column_stats_backup | RowExclusiveLock
- dbms_stats.column_stats_backup | ShareUpdateExclusiveLock
- dbms_stats.column_stats_backup_pkey | RowExclusiveLock
- dbms_stats.relation_stats_backup | RowExclusiveLock
- dbms_stats.relation_stats_backup | ShareUpdateExclusiveLock
- dbms_stats.relation_stats_backup_pkey | RowExclusiveLock
- (null) | ExclusiveLock
- (null) | ExclusiveLock
-(11 rows)
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
+ relation | mode
+----------------------------------+--------------------------
+ dbms_stats.backup_history | AccessShareLock
+ dbms_stats.backup_history | RowExclusiveLock
+ dbms_stats.backup_history | ShareUpdateExclusiveLock
+ dbms_stats.column_stats_backup | RowExclusiveLock
+ dbms_stats.column_stats_backup | ShareUpdateExclusiveLock
+ dbms_stats.relation_stats_backup | RowExclusiveLock
+ dbms_stats.relation_stats_backup | ShareUpdateExclusiveLock
+(7 rows)
COMMIT;
SELECT * FROM dbms_stats.backup_history;
ERROR: relation "dbms_stats._columnns_user" does not exist
LINE 1: SELECT count(*) FROM dbms_stats._columnns_user WHERE false;
^
-\c - postgres
+\c - super_user
DROP ROLE IF EXISTS regular_user;
CREATE ROLE regular_user LOGIN;
SET client_min_messages = fatal;
-CREATE ROLE postgres SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
+DROP ROLE IF EXISTS super_user;
+CREATE ROLE super_user SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
-- create object
CREATE TABLE pt0(id integer, day date);
i double precision
);
+-- updating _relation_stats_locked leads to merged stats caches
+-- See StatsCacheRelCallback() in pg_dbms_stats.c for details.
+CREATE FUNCTION reset_stat_and_cache() RETURNS void AS $$
+ UPDATE dbms_stats._relation_stats_locked SET relpages = relpages;
+ SELECT pg_stat_reset();
+$$
+LANGUAGE sql;
+
CREATE FUNCTION inform(VARIADIC arr text[]) RETURNS int AS $$
DECLARE
str text := 'arguments are ';
END;
$$LANGUAGE plpgsql;
+-- Table or index fetches will take place if stats merge performed.
CREATE VIEW lockd_io AS
SELECT relname,
- heap_blks_read + heap_blks_hit > 0 hb_fetch,
- idx_blks_read + idx_blks_hit > 0 ib_fetch
+ heap_blks_read + heap_blks_hit +
+ idx_blks_read + idx_blks_hit > 0 fetches
FROM pg_statio_user_tables
WHERE schemaname = 'dbms_stats'
- AND relname LIKE '%stats_locked'
+ AND relname LIKE '\_%\_stats_locked'
ORDER BY relid;
+CREATE VIEW internal_locks AS
+ SELECT relation::regclass, mode
+ FROM pg_locks
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
+
-- load data
INSERT INTO st0 VALUES (1, 'test'), (2, 'test');
INSERT INTO st1 SELECT i % 3, i % 3 FROM generate_series(1, 10000) t(i);
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
/*
* No.7-1 dbms_stats.backup
SELECT count(*) FROM dbms_stats.relation_stats_backup;
SELECT count(*) FROM dbms_stats.column_stats_backup;
--- No.7-1-11
+-- No.7-1-10
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats.relation_stats_backup;
+-- SELECT dbms_stats.backup(1, 's0.smv0'::regclass, NULL);
+-- SELECT count(*) FROM dbms_stats.relation_stats_backup;
+-- SELECT count(*) FROM dbms_stats.column_stats_backup;
+
+-- No.7-1-12
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL, 1::int2);
SELECT relid::regclass FROM dbms_stats.relation_stats_backup
GROUP BY starelid, staattnum
ORDER BY starelid, staattnum;
--- No.7-1-13
+-- No.7-1-14
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL::regclass, NULL);
SELECT relid::regclass FROM dbms_stats.relation_stats_backup
GROUP BY starelid, staattnum
ORDER BY starelid, staattnum;
--- No.7-1-17
+-- No.7-1-18
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(NULL, 's0.st0'::regclass, NULL);
SELECT count(*) FROM dbms_stats.relation_stats_backup;
SELECT id, unit, comment FROM dbms_stats.backup_history;
-- No.8-1-12
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats.backup_history;
+-- SELECT dbms_stats.backup('s0.smv0'::regclass, NULL, 'dummy comment');
+-- SELECT id, unit, comment FROM dbms_stats.backup_history;
+
+-- No.8-1-13
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('pg_catalog.pg_class'::regclass, NULL, 'dummy comment');
SELECT id, unit, comment FROM dbms_stats.backup_history;
--- No.8-1-13
+-- No.8-1-14
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('s0.st0'::regclass, 'dummy', 'dummy comment');
SELECT id, unit, comment FROM dbms_stats.backup_history;
--- No.8-1-14
+-- No.8-1-15
DELETE FROM dbms_stats.backup_history;
DELETE FROM pg_statistic
WHERE starelid = 's0.st0'::regclass
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore(2, 's0.st0', NULL);
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
AND relname = 's0.sft0';
-- No.9-1-22
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- INSERT INTO dbms_stats.relation_stats_backup(
+-- id, relid, relname, relpages, reltuples,
+-- relallvisible,
+-- curpages)
+-- VALUES (3, 's0.smv0'::regclass, 's0.smv0', 1, 1,
+-- 1,
+-- 1);
+-- SELECT * FROM relations_backup_v
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+-- SELECT dbms_stats.restore(2, 's0.smv0', NULL);
+-- SELECT count(*) FROM dbms_stats.column_stats_locked;
+-- SELECT count(*) FROM dbms_stats.relation_stats_locked;
+-- DELETE FROM dbms_stats.relation_stats_backup
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+
+-- No.9-1-23
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats.relation_stats_backup(
id, relid, relname, relpages, reltuples,
WHERE id = 2
AND relname = 'pg_catalog.pg_class';
--- No.9-1-23
+-- No.9-1-24
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats._relation_stats_locked(relid, relname)
VALUES ('s0.st0'::regclass, 's0.st0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v;
--- No.9-1-24
+-- No.9-1-25
DELETE FROM dbms_stats._relation_stats_locked;
SELECT id, unit, comment FROM dbms_stats.backup_history
WHERE id = 2;
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore_stats(2);
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
-- No.11-1-12
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.sft0', 'id');
+SELECT * FROM relations_locked_v;
+SELECT * FROM columns_locked_v c;
-- No.11-1-13
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0', 'id');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
+-- No.11-1-14
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class', 'id');
--- No.11-1-14
+-- No.11-1-15
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0', 'dummy');
--- No.11-1-15
+-- No.11-1-16
DELETE FROM dbms_stats._relation_stats_locked;
DELETE FROM pg_statistic
WHERE starelid = 's0.st0'::regclass;
SELECT dbms_stats.lock('s0.st0', 'id');
VACUUM ANALYZE;
--- No.11-1-16
+-- No.11-1-17
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats._relation_stats_locked(
relid, relname, relpages, reltuples,
SELECT dbms_stats.lock('s0.st0', 'id');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
--- No.11-1-17
+-- No.11-1-18
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0', 'id');
SELECT * FROM relations_locked_v
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.lock('s0.st0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
-- No.11-2-2
-- No.11-2-9
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.sft0');
+SELECT * FROM relations_locked_v;
+SELECT * FROM columns_locked_v c;
-- No.11-2-10
+-- #### 9.1 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
+-- No.11-2-11
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class');
--- No.11-2-11
+-- No.11-2-12
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock_table_stats('s0.st0');
UPDATE dbms_stats._relation_stats_locked
SELECT dbms_stats.lock('s0.st0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
--- No.11-2-12
+-- No.11-2-13
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('s0.st0');
SELECT * FROM relations_locked_v;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-11
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock(NULL, 'id');
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-12
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock('s0.st0', NULL);
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock();
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_database_stats();
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_schema_stats('s0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0.st0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0', 'st0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
/*
* No.7-1 dbms_stats.backup
SELECT count(*) FROM dbms_stats.relation_stats_backup;
SELECT count(*) FROM dbms_stats.column_stats_backup;
+-- No.7-1-10
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats.relation_stats_backup;
+-- SELECT dbms_stats.backup(1, 's0.smv0'::regclass, NULL);
+-- SELECT count(*) FROM dbms_stats.relation_stats_backup;
+-- SELECT count(*) FROM dbms_stats.column_stats_backup;
+
-- No.7-1-12
DELETE FROM dbms_stats.relation_stats_backup;
SELECT dbms_stats.backup(1, NULL, 1::int2);
SELECT dbms_stats.backup('s0.sft0'::regclass, NULL, 'dummy comment');
SELECT id, unit, comment FROM dbms_stats.backup_history;
+-- No.8-1-12
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats.backup_history;
+-- SELECT dbms_stats.backup('s0.smv0'::regclass, NULL, 'dummy comment');
+-- SELECT id, unit, comment FROM dbms_stats.backup_history;
+
-- No.8-1-13
DELETE FROM dbms_stats.backup_history;
SELECT dbms_stats.backup('pg_catalog.pg_class'::regclass, NULL, 'dummy comment');
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore(2, 's0.st0', NULL);
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
WHERE id = 3
AND relname = 's0.sft0';
+-- No.9-1-22
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- INSERT INTO dbms_stats.relation_stats_backup(
+-- id, relid, relname, relpages, reltuples,
+-- relallvisible,
+-- curpages)
+-- VALUES (3, 's0.smv0'::regclass, 's0.smv0', 1, 1,
+-- 1,
+-- 1);
+-- SELECT * FROM relations_backup_v
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+-- SELECT dbms_stats.restore(2, 's0.smv0', NULL);
+-- SELECT count(*) FROM dbms_stats.column_stats_locked;
+-- SELECT count(*) FROM dbms_stats.relation_stats_locked;
+-- DELETE FROM dbms_stats.relation_stats_backup
+-- WHERE id = 3
+-- AND relname = 's0.smv0';
+
-- No.9-1-23
DELETE FROM dbms_stats._relation_stats_locked;
INSERT INTO dbms_stats.relation_stats_backup(
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore_stats(2);
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
SELECT dbms_stats.lock('s0.sft0', 'id');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
+-- No.11-1-13
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0', 'id');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
-- No.11-1-14
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class', 'id');
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.lock('s0.st0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
-- No.11-2-2
SELECT dbms_stats.lock('s0.sft0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
+-- No.11-2-10
+-- #### 9.2 doesn't has materialized views
+-- DELETE FROM dbms_stats._relation_stats_locked;
+-- SELECT dbms_stats.lock('s0.smv0');
+-- SELECT * FROM relations_locked_v;
+-- SELECT * FROM columns_locked_v c;
-- No.11-2-11
DELETE FROM dbms_stats._relation_stats_locked;
SELECT dbms_stats.lock('pg_catalog.pg_class');
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-11
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock(NULL, 'id');
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-12
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock('s0.st0', NULL);
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock();
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_database_stats();
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_schema_stats('s0');
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0.st0');
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0', 'st0');
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks l join pg_class c on (l.relation = c.oid and c.relkind = 'r')
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
/*
* No.6-4 dbms_stats.is_target_relkind
*/
--- No.6-4-10
-SELECT dbms_stats.is_target_relkind('f');
--- No.6-4-11
-SELECT dbms_stats.is_target_relkind('m');
+-- No.6-4- 10-11
+SELECT dbms_stats.is_target_relkind(k::"char")
+ FROM (VALUES ('r'), ('i'), ('f'), ('m'),
+ ('S'), ('t'), ('v'), ('c')) t(k);
/*
* No.7-1 dbms_stats.backup
*/
-- No.9-1-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore(2, 's0.st0', NULL);
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
-- No.10-7-3
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.restore_stats(2);
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats.relation_stats_locked
GROUP BY relid
*/
-- No.11-2-1
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.lock('s0.st0');
SELECT * FROM relations_locked_v;
SELECT * FROM columns_locked_v c;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
-- No.11-2-2
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-11
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock(NULL, 'id');
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-12
DELETE FROM dbms_stats._relation_stats_locked;
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
SELECT dbms_stats.unlock('s0.st0', NULL);
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
GROUP BY starelid, staattnum
- ORDER BY starelid;
+ ORDER BY starelid, staattnum;
-- No.13-1-13
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock();
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-1-4
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_database_stats();
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT count(*) FROM dbms_stats._relation_stats_locked;
SELECT count(*) FROM dbms_stats._column_stats_locked;
-- No.14-2-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_schema_stats('s0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-3-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0.st0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-4-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
GROUP BY starelid
ORDER BY starelid;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_table_stats('s0', 'st0');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
-- No.14-5-9
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
-- No.14-6-8
DELETE FROM dbms_stats._relation_stats_locked;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
SELECT dbms_stats.lock_database_stats();
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
GROUP BY relid
ORDER BY relid;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
BEGIN;
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
-SELECT relation::regclass, mode
- FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+SELECT * FROM internal_locks;
COMMIT;
SELECT starelid, attname, stainherit FROM columns_locked_v c;
SELECT relid::regclass FROM dbms_stats._relation_stats_locked
\pset null '(null)'
+
/*
* No.2-3 dbms_stats.backup_history_id_seq
*/
EXPLAIN (costs false) SELECT * FROM s0.st2 WHERE id < 1;
SELECT dbms_stats.lock_table_stats('s0.st2'::regclass);
UPDATE dbms_stats._relation_stats_locked SET curpages = 10000;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
-- No.3-1-1
SET pg_dbms_stats.use_locked_stats TO ON;
EXPLAIN (costs false) SELECT * FROM s0.st2 WHERE id < 1;
RESET pg_dbms_stats.use_locked_stats;
EXPLAIN (costs false) SELECT * FROM s0.st2 WHERE id < 1;
-- clean up
-\c - postgres
+\c - super_user
DELETE FROM dbms_stats._relation_stats_locked;
/*
SELECT dbms_stats.lock_table_stats('st1');
/*
- * No.5-2 dbms_stats.invalidate_column_cache
+ * No.5-2 invalid calls of dbms_stats.invalidate_column_cache
*/
-- No.5-2-1
SELECT dbms_stats.invalidate_column_cache();
WHERE starelid = 'st1'::regclass
AND staattnum = 1
AND stainherit = false;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
-- No.5-2-10
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
UPDATE dbms_stats._relation_stats_locked SET curpages = 1
WHERE relid = 'st1'::regclass;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
-- No.5-3-10
SELECT relname, curpages FROM dbms_stats.relation_stats_locked
WHERE relid = 'st1'::regclass;
SELECT pg_sleep(0.5);
-SELECT pg_stat_reset();
+SELECT reset_stat_and_cache();
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
UPDATE dbms_stats._relation_stats_locked SET curpages = 1000
WHERE relid = 'st1_exp'::regclass;
SELECT pg_sleep(0.5);
SELECT * FROM lockd_io;
+SELECT reset_stat_and_cache();
SELECT relname, curpages FROM dbms_stats.relation_stats_locked
WHERE relid = 'st1'::regclass;
SELECT pg_sleep(0.5);
-- No.5-4-1
UPDATE dbms_stats._relation_stats_locked SET curpages = 1
WHERE relid = 'st1'::regclass;
+VACUUM dbms_stats._relation_stats_locked; -- in order to avoid auto vacuum
EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
\c
SET pg_dbms_stats.use_locked_stats to NO;
SELECT * FROM s0.droptest
WHERE id = 1;
SELECT pg_sleep(0.5);
-SELECT pg_stat_reset();
+SELECT reset_stat_and_cache();
ALTER TABLE s0.droptest RENAME TO test;
SELECT pg_sleep(0.5);
SELECT * FROM lockd_io;
+SELECT reset_stat_and_cache();
SELECT * FROM s0.test
WHERE id = 1;
SELECT pg_sleep(0.5);
SELECT * FROM s0.droptest
WHERE id = 1;
SELECT pg_sleep(0.5);
-SELECT pg_stat_reset();
+SELECT reset_stat_and_cache();
ALTER TABLE s0.droptest RENAME id TO test;
SELECT pg_sleep(0.5);
SELECT * FROM lockd_io;
+SELECT reset_stat_and_cache();
SELECT * FROM s0.droptest
WHERE test = 1;
SELECT pg_sleep(0.5);
SELECT * FROM s0.droptest
WHERE id = 1;
SELECT pg_sleep(0.5);
-SELECT pg_stat_reset();
+SELECT reset_stat_and_cache();
ANALYZE;
SELECT pg_sleep(0.5);
SELECT * FROM lockd_io;
+SELECT reset_stat_and_cache();
SELECT * FROM s0.droptest
WHERE id = 1;
SELECT pg_sleep(1.0);
SELECT * FROM s0.droptest
WHERE id = 4;
SELECT pg_sleep(0.5);
-SELECT pg_stat_reset();
+SELECT reset_stat_and_cache();
VACUUM;
SELECT pg_sleep(0.5);
SELECT * FROM lockd_io;
+SELECT reset_stat_and_cache();
SELECT * FROM s0.droptest
WHERE id = 4;
SELECT pg_sleep(0.5);
BEGIN;
SELECT relation::regclass, mode
FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
SELECT id, unit, comment FROM dbms_stats.purge_stats(2);
SELECT relation::regclass, mode
FROM pg_locks
- WHERE mode LIKE '%ExclusiveLock%'
- ORDER BY relation::regclass::text, mode;
+ WHERE relation::regclass::text LIKE 'dbms_stats.\_%\_locked'
+ OR relation::regclass::text LIKE 'dbms_stats.backup_history'
+ OR relation::regclass::text LIKE 'dbms_stats.%\_backup'
+ ORDER BY relation::regclass::text, mode;
COMMIT;
SELECT * FROM dbms_stats.backup_history;
-- No.15-1-6
SELECT count(*) FROM dbms_stats._relation_stats_locked WHERE false;
-- No.19-1-5
SELECT count(*) FROM dbms_stats._columnns_user WHERE false;
-\c - postgres
+\c - super_user