OSDN Git Service

Stablize regtest.
authorKyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Thu, 7 Aug 2014 07:53:31 +0000 (16:53 +0900)
committerKyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Fri, 8 Aug 2014 00:46:57 +0000 (09:46 +0900)
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.

expected/init-common.out
expected/ut-9.1.out
expected/ut-9.2.out
expected/ut-9.3.out
expected/ut-common.out
sql/init-common.sql
sql/ut-9.1.sql
sql/ut-9.2.sql
sql/ut-9.3.sql
sql/ut-common.sql

index 1d94649..f4d28e9 100644 (file)
@@ -11,7 +11,8 @@ SET client_min_messages = warning;
 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);
@@ -40,6 +41,13 @@ CREATE TYPE complex AS (
      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 ';
@@ -59,14 +67,22 @@ BEGIN
     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);
index d739bdf..a72b7ec 100644 (file)
@@ -1103,12 +1103,21 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -1134,7 +1143,13 @@ SELECT count(*) FROM dbms_stats.column_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 
@@ -1177,7 +1192,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats.column_stats_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 
@@ -1226,7 +1241,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats.column_stats_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
@@ -1429,6 +1444,11 @@ SELECT id, unit, comment FROM dbms_stats.backup_history;
 (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"
@@ -1437,7 +1457,7 @@ SELECT id, unit, comment FROM dbms_stats.backup_history;
 ----+------+---------
 (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"
@@ -1446,7 +1466,7 @@ SELECT id, unit, comment FROM dbms_stats.backup_history;
 ----+------+---------
 (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
@@ -1798,15 +1818,12 @@ VACUUM ANALYZE;
  */
 -- 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 
@@ -1814,20 +1831,17 @@ SELECT dbms_stats.restore(2, 's0.st0', NULL);
  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;
@@ -2339,6 +2353,25 @@ DELETE FROM dbms_stats.relation_stats_backup
  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,
@@ -2373,7 +2406,7 @@ SELECT count(*) FROM dbms_stats.relation_stats_locked;
 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');
@@ -2424,7 +2457,7 @@ SELECT * FROM columns_locked_v;
  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;
@@ -2753,15 +2786,12 @@ SELECT dbms_stats.restore_stats(0);
 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 
@@ -2781,20 +2811,17 @@ SELECT dbms_stats.restore_stats(2);
  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;
@@ -3106,22 +3133,38 @@ ERROR:  "s0.sc0" must be a table or an index
 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,
@@ -3166,7 +3209,7 @@ SELECT * FROM columns_locked_v c;
  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  
@@ -3193,15 +3236,12 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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  
@@ -3224,21 +3264,17 @@ SELECT * FROM columns_locked_v c;
  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
@@ -3311,11 +3347,27 @@ DELETE FROM dbms_stats._relation_stats_locked;
 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 
@@ -3350,7 +3402,7 @@ SELECT * FROM columns_locked_v c;
  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  
@@ -4323,7 +4375,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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)
@@ -4372,7 +4424,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4415,7 +4467,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4477,7 +4529,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4523,7 +4575,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4541,6 +4593,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
 
 -- 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 
 ---------------------
@@ -4573,14 +4626,10 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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   
@@ -4601,19 +4650,15 @@ SELECT dbms_stats.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;
@@ -4827,6 +4872,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -4859,14 +4905,10 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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 
@@ -4887,19 +4929,15 @@ SELECT dbms_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;
@@ -5557,6 +5595,7 @@ SELECT starelid::regclass, 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();
  lock_database_stats 
 ---------------------
@@ -5612,14 +5651,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -5632,19 +5667,15 @@ SELECT dbms_stats.unlock_schema_stats('s0');
  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
@@ -6324,6 +6355,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -6379,14 +6411,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -6394,20 +6422,14 @@ SELECT dbms_stats.unlock_table_stats('s0.st0');
  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
@@ -7094,6 +7116,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -7149,14 +7172,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -7164,20 +7183,14 @@ SELECT dbms_stats.unlock_table_stats('s0', 'st0');
  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
@@ -8096,6 +8109,7 @@ 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 
 ---------------------
@@ -8157,14 +8171,10 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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 
@@ -8172,18 +8182,13 @@ SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
  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;
@@ -8988,6 +8993,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -9049,14 +9055,10 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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 
@@ -9064,18 +9066,13 @@ SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
  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;
index e315cb6..64195ea 100644 (file)
@@ -1352,12 +1352,21 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -1383,6 +1392,12 @@ SELECT count(*) FROM dbms_stats.column_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);
@@ -1688,6 +1703,11 @@ SELECT id, unit, comment FROM dbms_stats.backup_history;
   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');
@@ -2071,11 +2091,9 @@ VACUUM ANALYZE;
  */
 -- 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)
@@ -2086,17 +2104,18 @@ SELECT dbms_stats.restore(2, 's0.st0', NULL);
  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
@@ -2618,6 +2637,25 @@ SELECT count(*) 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(
@@ -3049,11 +3087,9 @@ SELECT dbms_stats.restore_stats(0);
 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)
@@ -3077,17 +3113,18 @@ SELECT dbms_stats.restore_stats(2);
  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
@@ -3420,6 +3457,12 @@ SELECT * FROM columns_locked_v c;
  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');
@@ -3514,11 +3557,9 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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)
@@ -3544,17 +3585,17 @@ SELECT * FROM columns_locked_v c;
  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
@@ -3642,6 +3683,12 @@ SELECT * FROM columns_locked_v c;
  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');
@@ -4692,7 +4739,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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)
@@ -4743,7 +4790,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4788,7 +4835,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4853,7 +4900,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4901,7 +4948,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -4920,6 +4967,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
 
 -- 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 
 ---------------------
@@ -4953,10 +5001,7 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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)
@@ -4981,17 +5026,15 @@ SELECT dbms_stats.unlock();
  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;
@@ -5209,6 +5252,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -5242,10 +5286,7 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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)
@@ -5270,17 +5311,15 @@ SELECT dbms_stats.unlock_database_stats();
  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;
@@ -5964,6 +6003,7 @@ SELECT starelid::regclass, 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();
  lock_database_stats 
 ---------------------
@@ -6022,10 +6062,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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)
@@ -6042,17 +6079,15 @@ SELECT dbms_stats.unlock_schema_stats('s0');
  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
@@ -6760,6 +6795,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -6818,10 +6854,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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)
@@ -6832,10 +6865,7 @@ SELECT dbms_stats.unlock_table_stats('s0.st0');
  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
@@ -7559,6 +7589,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -7617,10 +7648,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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)
@@ -7631,10 +7659,7 @@ SELECT dbms_stats.unlock_table_stats('s0', 'st0');
  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
@@ -8600,6 +8625,7 @@ 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 
 ---------------------
@@ -8664,10 +8690,7 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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)
@@ -8678,10 +8701,7 @@ SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
  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
@@ -9527,6 +9547,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -9591,10 +9612,7 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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)
@@ -9605,10 +9623,7 @@ SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
  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
index 27b2425..44e57a4 100644 (file)
@@ -1393,19 +1393,21 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -2179,15 +2181,12 @@ VACUUM ANALYZE;
  */
 -- 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 
@@ -2195,20 +2194,17 @@ SELECT dbms_stats.restore(2, 's0.st0', NULL);
  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;
@@ -3219,15 +3215,12 @@ SELECT dbms_stats.restore_stats(0);
 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 
@@ -3249,20 +3242,17 @@ SELECT dbms_stats.restore_stats(2);
  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;
@@ -3722,15 +3712,12 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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  
@@ -3753,21 +3740,17 @@ SELECT * FROM columns_locked_v c;
  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
@@ -4971,7 +4954,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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)
@@ -5024,7 +5007,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -5073,7 +5056,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -5143,7 +5126,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -5195,7 +5178,7 @@ SELECT relid::regclass FROM dbms_stats._relation_stats_locked
 
 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
@@ -5217,6 +5200,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats._column_stats_locked
 
 -- 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 
 ---------------------
@@ -5251,14 +5235,10 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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   
@@ -5281,19 +5261,15 @@ SELECT dbms_stats.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;
@@ -5515,6 +5491,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -5549,14 +5526,10 @@ SELECT count(*) FROM dbms_stats._column_stats_locked;
 (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 
@@ -5579,19 +5552,15 @@ SELECT dbms_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;
@@ -6301,6 +6270,7 @@ SELECT starelid::regclass, 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();
  lock_database_stats 
 ---------------------
@@ -6362,14 +6332,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -6384,19 +6350,15 @@ SELECT dbms_stats.unlock_schema_stats('s0');
  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
@@ -7132,6 +7094,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -7193,14 +7156,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -7208,20 +7167,14 @@ SELECT dbms_stats.unlock_table_stats('s0.st0');
  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
@@ -7968,6 +7921,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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 
 ---------------------
@@ -8029,14 +7983,10 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
 (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 
@@ -8044,20 +7994,14 @@ SELECT dbms_stats.unlock_table_stats('s0', 'st0');
  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
@@ -9084,6 +9028,7 @@ 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 
 ---------------------
@@ -9153,14 +9098,10 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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 
@@ -9168,19 +9109,13 @@ SELECT dbms_stats.unlock_column_stats('s0.st0', 'id');
  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;
@@ -10081,6 +10016,7 @@ 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();
  lock_database_stats 
 ---------------------
@@ -10150,14 +10086,10 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
 (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 
@@ -10165,19 +10097,13 @@ SELECT dbms_stats.unlock_column_stats('s0', 'st0', 'id');
  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;
index ec0d4d1..9cc9b01 100644 (file)
@@ -59,6 +59,7 @@ SELECT dbms_stats.lock_table_stats('s0.st2'::regclass);
 (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;
@@ -108,7 +109,7 @@ 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
@@ -301,7 +302,7 @@ SELECT dbms_stats.lock_table_stats('st1');
 (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();
@@ -384,6 +385,7 @@ UPDATE dbms_stats._column_stats_locked SET stanullfrac = 1
  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        
 -------------------------
@@ -569,6 +571,7 @@ 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;
        QUERY PLAN        
 -------------------------
@@ -638,12 +641,13 @@ SELECT pg_sleep(0.5);
  
 (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);
@@ -653,12 +657,18 @@ 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 
@@ -673,10 +683,10 @@ SELECT pg_sleep(0.5);
 (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)
 
 /*
@@ -685,6 +695,7 @@ SELECT * FROM lockd_io;
 -- 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        
 -------------------------
@@ -795,9 +806,9 @@ SELECT pg_sleep(0.5);
  
 (1 row)
 
-SELECT pg_stat_reset();
- pg_stat_reset 
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache 
+----------------------
  
 (1 row)
 
@@ -809,12 +820,18 @@ SELECT pg_sleep(0.5);
 (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 
@@ -829,10 +846,10 @@ 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        | t
+        relname         | fetches 
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked   | t
 (2 rows)
 
 ALTER TABLE s0.test RENAME TO droptest;
@@ -850,9 +867,9 @@ SELECT pg_sleep(0.5);
  
 (1 row)
 
-SELECT pg_stat_reset();
- pg_stat_reset 
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache 
+----------------------
  
 (1 row)
 
@@ -864,12 +881,18 @@ SELECT pg_sleep(0.5);
 (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 
@@ -884,10 +907,10 @@ 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        | t
+        relname         | fetches 
+------------------------+---------
+ _relation_stats_locked | t
+ _column_stats_locked   | t
 (2 rows)
 
 ALTER TABLE s0.droptest RENAME test TO id;
@@ -906,9 +929,9 @@ SELECT pg_sleep(0.5);
  
 (1 row)
 
-SELECT pg_stat_reset();
- pg_stat_reset 
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache 
+----------------------
  
 (1 row)
 
@@ -920,12 +943,18 @@ SELECT pg_sleep(0.5);
 (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 
@@ -940,10 +969,10 @@ SELECT pg_sleep(1.0);
 (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
@@ -962,9 +991,9 @@ SELECT pg_sleep(0.5);
  
 (1 row)
 
-SELECT pg_stat_reset();
- pg_stat_reset 
----------------
+SELECT reset_stat_and_cache();
+ reset_stat_and_cache 
+----------------------
  
 (1 row)
 
@@ -976,12 +1005,18 @@ SELECT pg_sleep(0.5);
 (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 
@@ -996,10 +1031,10 @@ SELECT pg_sleep(0.5);
 (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
@@ -2021,12 +2056,13 @@ SELECT * FROM dbms_stats.backup_history;
 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 
@@ -2037,22 +2073,20 @@ 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;
-               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;
@@ -2661,4 +2695,4 @@ SELECT count(*) FROM dbms_stats._columnns_user WHERE false;
 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
index ff7defa..0d7c6b2 100644 (file)
@@ -13,7 +13,8 @@ SET client_min_messages = warning;
 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);
@@ -48,6 +49,14 @@ CREATE TYPE complex AS (
      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 ';
@@ -68,15 +77,24 @@ BEGIN
 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);
index 6face6e..93f62c1 100644 (file)
@@ -728,8 +728,10 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -741,7 +743,14 @@ SELECT dbms_stats.backup(1, 's0.sft0'::regclass, NULL);
 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
@@ -751,7 +760,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats.column_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
@@ -761,7 +770,7 @@ SELECT starelid::regclass, staattnum FROM dbms_stats.column_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;
@@ -852,16 +861,22 @@ SELECT dbms_stats.backup('s0.sft0'::regclass, NULL, 'dummy comment');
 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
@@ -995,16 +1010,11 @@ VACUUM ANALYZE;
  */
 -- 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
@@ -1202,6 +1212,26 @@ DELETE FROM dbms_stats.relation_stats_backup
    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,
@@ -1218,7 +1248,7 @@ 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');
@@ -1234,7 +1264,7 @@ SELECT dbms_stats.restore(2, 's0.st0', NULL);
 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;
@@ -1314,16 +1344,11 @@ SELECT dbms_stats.restore_stats(0);
 
 -- 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
@@ -1415,19 +1440,27 @@ SELECT dbms_stats.lock('s0.sc0', 'id');
 -- 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,
@@ -1451,7 +1484,7 @@ UPDATE dbms_stats._column_stats_locked
 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
@@ -1463,18 +1496,13 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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
@@ -1505,10 +1533,18 @@ SELECT dbms_stats.lock('s0.sc0');
 -- 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
@@ -1520,7 +1556,7 @@ 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;
@@ -1734,7 +1770,7 @@ SELECT relid::regclass 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;
 
 -- No.13-1-11
 DELETE FROM dbms_stats._relation_stats_locked;
@@ -1744,14 +1780,14 @@ SELECT relid::regclass 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;
@@ -1761,30 +1797,25 @@ SELECT relid::regclass 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;
@@ -1826,19 +1857,14 @@ 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;
@@ -1975,6 +2001,7 @@ SELECT starelid::regclass, 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
@@ -1983,15 +2010,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2132,6 +2153,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2140,15 +2162,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2289,6 +2305,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2297,15 +2314,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2431,21 +2442,16 @@ 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();
 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
@@ -2554,21 +2560,16 @@ 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
index 6f93bcc..74e937b 100644 (file)
@@ -872,8 +872,10 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -885,6 +887,13 @@ SELECT dbms_stats.backup(1, 's0.sft0'::regclass, NULL);
 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);
@@ -995,6 +1004,12 @@ DELETE FROM dbms_stats.backup_history;
 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');
@@ -1139,16 +1154,11 @@ VACUUM ANALYZE;
  */
 -- 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
@@ -1353,6 +1363,26 @@ 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(
@@ -1468,16 +1498,11 @@ SELECT dbms_stats.restore_stats(0);
 
 -- 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
@@ -1571,6 +1596,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.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');
@@ -1626,18 +1657,13 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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
@@ -1670,6 +1696,12 @@ 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.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');
@@ -1901,7 +1933,7 @@ SELECT relid::regclass 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;
 
 -- No.13-1-11
 DELETE FROM dbms_stats._relation_stats_locked;
@@ -1911,14 +1943,14 @@ SELECT relid::regclass 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;
@@ -1928,30 +1960,25 @@ SELECT relid::regclass 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;
@@ -1993,19 +2020,14 @@ 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;
@@ -2142,6 +2164,7 @@ SELECT starelid::regclass, 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
@@ -2150,15 +2173,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2299,6 +2316,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2307,15 +2325,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2456,6 +2468,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2464,15 +2477,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2598,21 +2605,16 @@ 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();
 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
@@ -2721,21 +2723,16 @@ 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
index 47af64b..dd067ca 100644 (file)
@@ -872,10 +872,10 @@ SELECT dbms_stats.unlock_database_stats();
 /*
  * 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
@@ -1152,16 +1152,11 @@ VACUUM ANALYZE;
  */
 -- 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
@@ -1500,16 +1495,11 @@ SELECT dbms_stats.restore_stats(0);
 
 -- 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
@@ -1663,18 +1653,13 @@ SELECT starelid, attname, stainherit FROM columns_locked_v c;
  */
 -- 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
@@ -1943,7 +1928,7 @@ SELECT relid::regclass 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;
 
 -- No.13-1-11
 DELETE FROM dbms_stats._relation_stats_locked;
@@ -1953,14 +1938,14 @@ SELECT relid::regclass 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;
@@ -1970,30 +1955,25 @@ SELECT relid::regclass 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;
@@ -2035,19 +2015,14 @@ 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;
@@ -2184,6 +2159,7 @@ SELECT starelid::regclass, 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
@@ -2192,15 +2168,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2341,6 +2311,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2349,15 +2320,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2498,6 +2463,7 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_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();
 SELECT relid::regclass FROM dbms_stats._relation_stats_locked
  GROUP BY relid
@@ -2506,15 +2472,9 @@ SELECT starelid::regclass, count(*) FROM dbms_stats._column_stats_locked
  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
@@ -2640,21 +2600,16 @@ 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();
 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
@@ -2763,21 +2718,16 @@ 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
index 1f84fcf..f03a143 100644 (file)
@@ -1,4 +1,5 @@
 \pset null '(null)'
+
 /*
  * No.2-3 dbms_stats.backup_history_id_seq
  */
@@ -26,6 +27,7 @@ DELETE FROM dbms_stats._relation_stats_locked;
 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;
@@ -41,7 +43,7 @@ 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;
 
 /*
@@ -137,7 +139,7 @@ SELECT dbms_stats.unlock_database_stats();
 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();
@@ -197,6 +199,7 @@ UPDATE dbms_stats._column_stats_locked SET stanullfrac = 1
  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
@@ -291,6 +294,7 @@ EXPLAIN (costs false) SELECT * FROM st1 WHERE val IS NULL;
 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
@@ -311,11 +315,13 @@ SELECT dbms_stats.lock_table_stats('st1');
 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);
@@ -327,6 +333,7 @@ SELECT * FROM lockd_io;
 -- 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;
@@ -360,10 +367,11 @@ VACUUM ANALYZE;
 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);
@@ -374,10 +382,11 @@ ALTER TABLE s0.test RENAME TO droptest;
 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);
@@ -389,10 +398,11 @@ INSERT INTO s0.droptest VALUES (4);
 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);
@@ -404,10 +414,11 @@ INSERT INTO s0.droptest VALUES (4),(5);
 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);
@@ -903,13 +914,17 @@ SELECT * FROM dbms_stats.backup_history;
 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
@@ -1122,4 +1137,4 @@ SELECT count(*) FROM dbms_stats.stats WHERE false;
 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