summaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/intra-grant-inplace-db.spec
blob: bbecd5ddde51f28d4c0b2926236da9dfd77d7056 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# GRANT's lock is the catalog tuple xmax.  GRANT doesn't acquire a heavyweight
# lock on the object undergoing an ACL change.  In-place updates, namely
# datfrozenxid, need special code to cope.

setup
{
	CREATE ROLE regress_temp_grantee;
}

teardown
{
	REVOKE ALL ON DATABASE isolation_regression FROM regress_temp_grantee;
	DROP ROLE regress_temp_grantee;
}

# heap_update(pg_database)
session s1
step b1	{ BEGIN; }
step grant1	{
	GRANT TEMP ON DATABASE isolation_regression TO regress_temp_grantee;
}
step c1	{ COMMIT; }

# inplace update
session s2
step vac2	{ VACUUM (FREEZE); }

# observe datfrozenxid
session s3
setup	{
	CREATE TEMP TABLE frozen_witness (x xid);
}
step snap3	{
	INSERT INTO frozen_witness
	SELECT datfrozenxid FROM pg_database WHERE datname = current_catalog;
}
step cmp3	{
	SELECT 'datfrozenxid retreated'
	FROM pg_database
	WHERE datname = current_catalog
		AND age(datfrozenxid) > (SELECT min(age(x)) FROM frozen_witness);
}


# XXX extant bug
permutation snap3 b1 grant1 vac2(c1) snap3 c1 cmp3