@@ -160,6 +160,141 @@ DROP VIEW tmp_view_new;
160160-- toast-like relation name
161161alter table stud_emp rename to pg_toast_stud_emp;
162162alter table pg_toast_stud_emp rename to stud_emp;
163+ -- renaming index should rename constraint as well
164+ ALTER TABLE onek ADD CONSTRAINT onek_unique1_constraint UNIQUE (unique1);
165+ NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "onek_unique1_constraint" for table "onek"
166+ ALTER INDEX onek_unique1_constraint RENAME TO onek_unique1_constraint_foo;
167+ ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo;
168+ -- renaming constraint
169+ ALTER TABLE onek ADD CONSTRAINT onek_check_constraint CHECK (unique1 >= 0);
170+ ALTER TABLE onek RENAME CONSTRAINT onek_check_constraint TO onek_check_constraint_foo;
171+ ALTER TABLE onek DROP CONSTRAINT onek_check_constraint_foo;
172+ -- renaming constraint should rename index as well
173+ ALTER TABLE onek ADD CONSTRAINT onek_unique1_constraint UNIQUE (unique1);
174+ NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "onek_unique1_constraint" for table "onek"
175+ DROP INDEX onek_unique1_constraint; -- to see whether it's there
176+ ERROR: cannot drop index onek_unique1_constraint because constraint onek_unique1_constraint on table onek requires it
177+ HINT: You can drop constraint onek_unique1_constraint on table onek instead.
178+ ALTER TABLE onek RENAME CONSTRAINT onek_unique1_constraint TO onek_unique1_constraint_foo;
179+ DROP INDEX onek_unique1_constraint_foo; -- to see whether it's there
180+ ERROR: cannot drop index onek_unique1_constraint_foo because constraint onek_unique1_constraint_foo on table onek requires it
181+ HINT: You can drop constraint onek_unique1_constraint_foo on table onek instead.
182+ ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo;
183+ -- renaming constraints vs. inheritance
184+ CREATE TABLE constraint_rename_test (a int CONSTRAINT con1 CHECK (a > 0), b int, c int);
185+ \d constraint_rename_test
186+ Table "public.constraint_rename_test"
187+ Column | Type | Modifiers
188+ --------+---------+-----------
189+ a | integer |
190+ b | integer |
191+ c | integer |
192+ Check constraints:
193+ "con1" CHECK (a > 0)
194+
195+ CREATE TABLE constraint_rename_test2 (a int CONSTRAINT con1 CHECK (a > 0), d int) INHERITS (constraint_rename_test);
196+ NOTICE: merging column "a" with inherited definition
197+ NOTICE: merging constraint "con1" with inherited definition
198+ \d constraint_rename_test2
199+ Table "public.constraint_rename_test2"
200+ Column | Type | Modifiers
201+ --------+---------+-----------
202+ a | integer |
203+ b | integer |
204+ c | integer |
205+ d | integer |
206+ Check constraints:
207+ "con1" CHECK (a > 0)
208+ Inherits: constraint_rename_test
209+
210+ ALTER TABLE constraint_rename_test2 RENAME CONSTRAINT con1 TO con1foo; -- fail
211+ ERROR: cannot rename inherited constraint "con1"
212+ ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- fail
213+ ERROR: inherited constraint "con1" must be renamed in child tables too
214+ ALTER TABLE constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- ok
215+ \d constraint_rename_test
216+ Table "public.constraint_rename_test"
217+ Column | Type | Modifiers
218+ --------+---------+-----------
219+ a | integer |
220+ b | integer |
221+ c | integer |
222+ Check constraints:
223+ "con1foo" CHECK (a > 0)
224+ Number of child tables: 1 (Use \d+ to list them.)
225+
226+ \d constraint_rename_test2
227+ Table "public.constraint_rename_test2"
228+ Column | Type | Modifiers
229+ --------+---------+-----------
230+ a | integer |
231+ b | integer |
232+ c | integer |
233+ d | integer |
234+ Check constraints:
235+ "con1foo" CHECK (a > 0)
236+ Inherits: constraint_rename_test
237+
238+ ALTER TABLE ONLY constraint_rename_test ADD CONSTRAINT con2 CHECK (b > 0);
239+ ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con2 TO con2foo; -- ok
240+ ALTER TABLE constraint_rename_test RENAME CONSTRAINT con2foo TO con2bar; -- ok
241+ \d constraint_rename_test
242+ Table "public.constraint_rename_test"
243+ Column | Type | Modifiers
244+ --------+---------+-----------
245+ a | integer |
246+ b | integer |
247+ c | integer |
248+ Check constraints:
249+ "con2bar" (ONLY) CHECK (b > 0)
250+ "con1foo" CHECK (a > 0)
251+ Number of child tables: 1 (Use \d+ to list them.)
252+
253+ \d constraint_rename_test2
254+ Table "public.constraint_rename_test2"
255+ Column | Type | Modifiers
256+ --------+---------+-----------
257+ a | integer |
258+ b | integer |
259+ c | integer |
260+ d | integer |
261+ Check constraints:
262+ "con1foo" CHECK (a > 0)
263+ Inherits: constraint_rename_test
264+
265+ ALTER TABLE constraint_rename_test ADD CONSTRAINT con3 PRIMARY KEY (a);
266+ NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "con3" for table "constraint_rename_test"
267+ ALTER TABLE constraint_rename_test RENAME CONSTRAINT con3 TO con3foo; -- ok
268+ \d constraint_rename_test
269+ Table "public.constraint_rename_test"
270+ Column | Type | Modifiers
271+ --------+---------+-----------
272+ a | integer | not null
273+ b | integer |
274+ c | integer |
275+ Indexes:
276+ "con3foo" PRIMARY KEY, btree (a)
277+ Check constraints:
278+ "con2bar" (ONLY) CHECK (b > 0)
279+ "con1foo" CHECK (a > 0)
280+ Number of child tables: 1 (Use \d+ to list them.)
281+
282+ \d constraint_rename_test2
283+ Table "public.constraint_rename_test2"
284+ Column | Type | Modifiers
285+ --------+---------+-----------
286+ a | integer |
287+ b | integer |
288+ c | integer |
289+ d | integer |
290+ Check constraints:
291+ "con1foo" CHECK (a > 0)
292+ Inherits: constraint_rename_test
293+
294+ DROP TABLE constraint_rename_test2;
295+ DROP TABLE constraint_rename_test;
296+ ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a);
297+ NOTICE: relation "constraint_rename_test" does not exist, skipping
163298-- FOREIGN KEY CONSTRAINT adding TEST
164299CREATE TABLE tmp2 (a int primary key);
165300NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tmp2_pkey" for table "tmp2"