blob: ad89902c8a11e0b09d243c93c2bd744eb8548f5f [file] [log] [blame]
-- @Description The locks held after different operations
CREATE TABLE ao_locks_table (a INT, b INT) WITH (appendonly=true) distributed by (a);
INSERT INTO ao_locks_table SELECT i as a, i as b FROM generate_series(1, 100) AS i;
create or replace view locktest_master as
select coalesce(
case when relname like 'pg_toast%index' then 'toast index'
when relname like 'pg_toast%' then 'toast table'
when relname like 'pg_aoseg%' then 'aoseg table'
when relname like 'pg_aovisimap%index' then 'aovisimap index'
when relname like 'pg_aovisimap%' then 'aovisimap table'
else relname end, 'dropped table'),
mode,
locktype,
'master'::text as node
from pg_locks l
left outer join pg_class c on l.relation = c.oid,
pg_database d
where relation is not null
and l.database = d.oid
and (relname <> 'gp_fault_strategy' and relname != 'locktest_master' or relname is NULL)
and d.datname = current_database()
and l.gp_segment_id = -1
group by l.gp_segment_id, relation, relname, locktype, mode
order by 1, 3, 2;
create or replace view locktest_segments_dist as
select relname,
mode,
locktype,
l.gp_segment_id as node,
relation
from pg_locks l
left outer join pg_class c on l.relation = c.oid,
pg_database d
where relation is not null
and l.database = d.oid
and (relname <> 'gp_fault_strategy' and relname != 'locktest_segments_dist' or relname is NULL)
and d.datname = current_database()
and l.gp_segment_id > -1
group by l.gp_segment_id, relation, relname, locktype, mode;
create or replace view locktest_segments as
SELECT coalesce(
case when relname like 'pg_toast%index' then 'toast index'
when relname like 'pg_toast%' then 'toast table'
when relname like 'pg_aoseg%' then 'aoseg table'
when relname like 'pg_aovisimap%index' then 'aovisimap index'
when relname like 'pg_aovisimap%' then 'aovisimap table'
else relname end, 'dropped table'),
mode,
locktype,
case when count(*) = 1 then '1 segment'
else 'n segments' end as node
FROM gp_dist_random('locktest_segments_dist')
group by relname, relation, mode, locktype;
-- Actual test begins
BEGIN;
INSERT INTO ao_locks_table VALUES (200, 200);
SELECT * FROM locktest_master where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
----------------+------------------+----------+--------
ao_locks_table | RowExclusiveLock | relation | master
(1 row)
SELECT * FROM locktest_segments where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
----------------+------------------+----------+-----------
ao_locks_table | RowExclusiveLock | relation | 1 segment
(1 row)
COMMIT;
BEGIN;
DELETE FROM ao_locks_table WHERE a = 1;
SELECT * FROM locktest_master where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
----------------+---------------+----------+--------
ao_locks_table | ExclusiveLock | relation | master
(1 row)
SELECT * FROM locktest_segments where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
-----------------+------------------+----------+-----------
ao_locks_table | ExclusiveLock | relation | 1 segment
aovisimap table | RowExclusiveLock | relation | 1 segment
aovisimap index | RowExclusiveLock | relation | 1 segment
(3 rows)
COMMIT;
BEGIN;
UPDATE ao_locks_table SET b = -1 WHERE a = 2;
SELECT * FROM locktest_master where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
----------------+---------------+----------+--------
ao_locks_table | ExclusiveLock | relation | master
(1 row)
SELECT * FROM locktest_segments where coalesce = 'ao_locks_table' or
coalesce like 'aovisimap%' or coalesce like 'aoseg%';
coalesce | mode | locktype | node
-----------------+------------------+----------+-----------
ao_locks_table | ExclusiveLock | relation | 1 segment
aovisimap table | RowExclusiveLock | relation | 1 segment
aovisimap index | RowExclusiveLock | relation | 1 segment
(3 rows)
COMMIT;