diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/lockcmds.c | 7 | ||||
-rw-r--r-- | src/test/regress/expected/lock.out | 16 | ||||
-rw-r--r-- | src/test/regress/sql/lock.sql | 17 |
3 files changed, 12 insertions, 28 deletions
diff --git a/src/backend/commands/lockcmds.c b/src/backend/commands/lockcmds.c index 15b4c2f90ad..a1670821aa4 100644 --- a/src/backend/commands/lockcmds.c +++ b/src/backend/commands/lockcmds.c @@ -87,6 +87,13 @@ RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid, return; /* woops, concurrently dropped; no permissions * check */ + /* Currently, we only allow plain tables to be locked */ + if (relkind != RELKIND_RELATION) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is not a table", + rv->relname))); + /* Check permissions. */ aclresult = LockTableAclCheck(relid, lockmode); if (aclresult != ACLCHECK_OK) diff --git a/src/test/regress/expected/lock.out b/src/test/regress/expected/lock.out index fec1c379833..fd273445030 100644 --- a/src/test/regress/expected/lock.out +++ b/src/test/regress/expected/lock.out @@ -5,10 +5,7 @@ CREATE SCHEMA lock_schema1; SET search_path = lock_schema1; CREATE TABLE lock_tbl1 (a BIGINT); -CREATE VIEW lock_view1 AS SELECT 1 AS a; -CREATE MATERIALIZED VIEW lock_mv1 AS SELECT * FROM lock_view1; -CREATE INDEX lock_mvi1 ON lock_mv1 (a); -CREATE SEQUENCE lock_seq; +CREATE VIEW lock_view1 AS SELECT 1; CREATE ROLE regress_rol_lock1; ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1; GRANT USAGE ON SCHEMA lock_schema1 TO regress_rol_lock1; @@ -33,7 +30,8 @@ LOCK TABLE lock_tbl1 IN SHARE MODE NOWAIT; LOCK TABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT; LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT; LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT; -LOCK TABLE lock_view1 IN EXCLUSIVE MODE; +LOCK TABLE lock_view1 IN EXCLUSIVE MODE; -- Will fail; can't lock a non-table +ERROR: "lock_view1" is not a table ROLLBACK; -- Verify that we can lock a table with inheritance children. CREATE TABLE lock_tbl2 (b BIGINT) INHERITS (lock_tbl1); @@ -53,21 +51,13 @@ BEGIN; LOCK TABLE ONLY lock_tbl1; ROLLBACK; RESET ROLE; --- Lock other relations -BEGIN TRANSACTION; -LOCK TABLE lock_mv1; -LOCK TABLE lock_mvi1; -LOCK TABLE lock_seq; -ROLLBACK; -- -- Clean up -- -DROP MATERIALIZED VIEW lock_mv1; DROP VIEW lock_view1; DROP TABLE lock_tbl3; DROP TABLE lock_tbl2; DROP TABLE lock_tbl1; -DROP SEQUENCE lock_seq; DROP SCHEMA lock_schema1 CASCADE; DROP ROLE regress_rol_lock1; -- atomic ops tests diff --git a/src/test/regress/sql/lock.sql b/src/test/regress/sql/lock.sql index 81af5d08fc8..567e8bccf1b 100644 --- a/src/test/regress/sql/lock.sql +++ b/src/test/regress/sql/lock.sql @@ -6,10 +6,7 @@ CREATE SCHEMA lock_schema1; SET search_path = lock_schema1; CREATE TABLE lock_tbl1 (a BIGINT); -CREATE VIEW lock_view1 AS SELECT 1 AS a; -CREATE MATERIALIZED VIEW lock_mv1 AS SELECT * FROM lock_view1; -CREATE INDEX lock_mvi1 ON lock_mv1 (a); -CREATE SEQUENCE lock_seq; +CREATE VIEW lock_view1 AS SELECT 1; CREATE ROLE regress_rol_lock1; ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1; GRANT USAGE ON SCHEMA lock_schema1 TO regress_rol_lock1; @@ -36,7 +33,7 @@ LOCK TABLE lock_tbl1 IN SHARE MODE NOWAIT; LOCK TABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT; LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT; LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT; -LOCK TABLE lock_view1 IN EXCLUSIVE MODE; +LOCK TABLE lock_view1 IN EXCLUSIVE MODE; -- Will fail; can't lock a non-table ROLLBACK; -- Verify that we can lock a table with inheritance children. @@ -58,23 +55,13 @@ LOCK TABLE ONLY lock_tbl1; ROLLBACK; RESET ROLE; --- Lock other relations -BEGIN TRANSACTION; -LOCK TABLE lock_mv1; -LOCK TABLE lock_mvi1; -LOCK TABLE lock_seq; -ROLLBACK; - - -- -- Clean up -- -DROP MATERIALIZED VIEW lock_mv1; DROP VIEW lock_view1; DROP TABLE lock_tbl3; DROP TABLE lock_tbl2; DROP TABLE lock_tbl1; -DROP SEQUENCE lock_seq; DROP SCHEMA lock_schema1 CASCADE; DROP ROLE regress_rol_lock1; |