aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2017-06-13 14:58:17 -0400
committerPeter Eisentraut <peter_e@gmx.net>2017-06-16 10:24:50 -0400
commit94da2a6a9a05776953524424a3d8079e54bc5d94 (patch)
tree348b53acd03dddebedbc1648c3094a9cb68c7eaa /src
parent41839b7abc85f21dd7ce76ab9cd1d7533c53cf9c (diff)
downloadpostgresql-94da2a6a9a05776953524424a3d8079e54bc5d94.tar.gz
postgresql-94da2a6a9a05776953524424a3d8079e54bc5d94.zip
Use RangeVarGetRelidExtended() in AlterSequence()
This allows us to combine the opening and the ownership check. Reported-by: Robert Haas <robertmhaas@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/sequence.c16
-rw-r--r--src/test/regress/expected/sequence.out4
-rw-r--r--src/test/regress/sql/sequence.sql2
3 files changed, 10 insertions, 12 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 2d820e5cebc..031bbc874de 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -429,10 +429,13 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt)
HeapTuple seqtuple;
HeapTuple newdatatuple;
- /* Open and lock sequence. */
- relid = RangeVarGetRelid(stmt->sequence,
- ShareRowExclusiveLock,
- stmt->missing_ok);
+ /* Open and lock sequence, and check for ownership along the way. */
+ relid = RangeVarGetRelidExtended(stmt->sequence,
+ ShareRowExclusiveLock,
+ stmt->missing_ok,
+ false,
+ RangeVarCallbackOwnsRelation,
+ NULL);
if (relid == InvalidOid)
{
ereport(NOTICE,
@@ -443,11 +446,6 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt)
init_sequence(relid, &elm, &seqrel);
- /* allow ALTER to sequence owner only */
- if (!pg_class_ownercheck(relid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
- stmt->sequence->relname);
-
rel = heap_open(SequenceRelationId, RowExclusiveLock);
seqtuple = SearchSysCacheCopy1(SEQRELID,
ObjectIdGetDatum(relid));
diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out
index 16c12f3434a..a43b52cfc1e 100644
--- a/src/test/regress/expected/sequence.out
+++ b/src/test/regress/expected/sequence.out
@@ -307,8 +307,8 @@ DROP SEQUENCE myseq2;
ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 24
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
NOTICE: relation "sequence_test2" does not exist, skipping
-ALTER SEQUENCE pg_class CYCLE; -- error, not a sequence
-ERROR: "pg_class" is not a sequence
+ALTER SEQUENCE serialTest1 CYCLE; -- error, not a sequence
+ERROR: "serialtest1" is not a sequence
CREATE SEQUENCE sequence_test2 START WITH 32;
CREATE SEQUENCE sequence_test4 INCREMENT BY -1;
SELECT nextval('sequence_test2');
diff --git a/src/test/regress/sql/sequence.sql b/src/test/regress/sql/sequence.sql
index d53e33d7794..b41c5a753dc 100644
--- a/src/test/regress/sql/sequence.sql
+++ b/src/test/regress/sql/sequence.sql
@@ -172,7 +172,7 @@ DROP SEQUENCE myseq2;
ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 24
INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
-ALTER SEQUENCE pg_class CYCLE; -- error, not a sequence
+ALTER SEQUENCE serialTest1 CYCLE; -- error, not a sequence
CREATE SEQUENCE sequence_test2 START WITH 32;
CREATE SEQUENCE sequence_test4 INCREMENT BY -1;