Обсуждение: how to rename an unnamed uniqueness constraint?
Hello,
sorry if I post this message a second time,
but I don't know whether I was succesful the
first time, and since actually it's quite
urgent that I solve the problem described below,
I forward this message (again or not).
----- Forwarded message from Oliver Kullmann <O.Kullmann@swansea.ac.uk> -----
Hello,
I have a table created with
CREATE TABLE Current_academic_year
(
year_id INT REFERENCES Academic_years,
CONSTRAINT year_id CHECK(year_id IS NOT NULL),
active BOOL NOT NULL,
UNIQUE(year_id),
UNIQUE(active)
)
;
Now I need to drop the constraint "UNIQUE(active)".
I tried variations of
ALTER TABLE current_academic_year DROP CONSTRAINT "???"
but I didn't succeed.
I'm using version 7.4.8.
Thanks in any case for your efforts!
Oliver
P.S. The "documentation" regarding the e-mail lists is
really the most arcane I've ever seen. I have no idea how
I'm supposed to post to a list, and/or to receive mails.
Of course I tried
http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org
and the help pages etc.: I always get "unsuccessful" back,
and the e-mails I get from "majordomo" just tell me that I
was unsuccessful (with registration).
And then there is "Sign in", "Sign out" ???
Just one paragraph about the idea how the average *novice*
should post a question and read the answer would be quite
useful.
----- End forwarded message -----
On Tue, 2005-08-16 at 19:01 +0100, Oliver Kullmann wrote: > > I have a table created with > > CREATE TABLE Current_academic_year > ( > year_id INT REFERENCES Academic_years, > CONSTRAINT year_id CHECK(year_id IS NOT NULL), > active BOOL NOT NULL, > > UNIQUE(year_id), > UNIQUE(active) > ) > ; > Now I need to drop the constraint "UNIQUE(active)". > I tried variations of > > ALTER TABLE current_academic_year DROP CONSTRAINT "???" > > but I didn't succeed. > > I'm using version 7.4.8. > > Thanks in any case for your efforts! \d current_academic_year would show you that you have an index called current_academic_year_active_key to enforce the unique constraint. junk=# DROP INDEX current_academic_year_active_key; ERROR: cannot drop index current_academic_year_active_key because constraint current_academic_year_active_key on tablecurrent_academic_year requires it HINT: You may drop constraint current_academic_year_active_key on table current_academic_year instead. Therefore, what you need to do is: ALTER TABLE current_academic_year DROP CONSTRAINT current_academic_year_active_key; -- Oliver Elphick olly@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver GPG: 1024D/A54310EA 92C8 39E7 280E 3631 3F0E 1EC0 5664 7A2F A543 10EA ======================================== Do you want to know God? http://www.lfix.co.uk/knowing_god.html
On Tue, 2005-08-16 at 19:01 +0100, Oliver Kullmann wrote:
> I have a table created with
>
> CREATE TABLE Current_academic_year
> (
> year_id INT REFERENCES Academic_years,
> CONSTRAINT year_id CHECK(year_id IS NOT NULL),
> active BOOL NOT NULL,
>
> UNIQUE(year_id),
> UNIQUE(active)
> )
> ;
Since this is the novice list, I will add that that is a round-about way
of declaring the table.
CREATE TABLE current_academic_year
(
year_id INT PRIMARY KEY REFERENCES academic_years,
active BOOLEAN NOT NULL UNIQUE
);
does the same and is easier to read.
Also, your capitalisation of table names won't be preserved, because you
don't double-quote them.
--
Oliver Elphick olly@lfix.co.uk
Isle of Wight http://www.lfix.co.uk/oliver
GPG: 1024D/A54310EA 92C8 39E7 280E 3631 3F0E 1EC0 5664 7A2F A543 10EA
========================================
Do you want to know God? http://www.lfix.co.uk/knowing_god.html
On Tue, Aug 16, 2005 at 11:11:23PM +0100, Oliver Elphick wrote: > On Tue, 2005-08-16 at 19:01 +0100, Oliver Kullmann wrote: > > > > I have a table created with > > > > CREATE TABLE Current_academic_year > > ( > > year_id INT REFERENCES Academic_years, > > CONSTRAINT year_id CHECK(year_id IS NOT NULL), > > active BOOL NOT NULL, > > > > UNIQUE(year_id), > > UNIQUE(active) > > ) > > ; > > > Now I need to drop the constraint "UNIQUE(active)". > > I tried variations of > > > > ALTER TABLE current_academic_year DROP CONSTRAINT "???" > > > > but I didn't succeed. > > > > I'm using version 7.4.8. > > > > Thanks in any case for your efforts! > > \d current_academic_year > > would show you that you have an index called > current_academic_year_active_key to enforce the unique constraint. > > junk=# DROP INDEX current_academic_year_active_key; > ERROR: cannot drop index current_academic_year_active_key because constraint current_academic_year_active_key on tablecurrent_academic_year requires it > HINT: You may drop constraint current_academic_year_active_key on table current_academic_year instead. > > Therefore, what you need to do is: > > ALTER TABLE current_academic_year DROP CONSTRAINT current_academic_year_active_key; > Thanks, that worked! > TIP 3: Have you checked our extensive FAQ? > http://www.postgresql.org/docs/faq > aha, looks good. I've added it to my bookmarks. Oliver
On Wed, Aug 17, 2005 at 06:52:08AM +1200, Andrej Ricnik-Bay wrote: > In psql a > \d+ <tablename> > will give you the name of the actual constraint. > > > Cheers, > Tink > thanks! BTW: why "d+ <tablename>" and not "d <tablename>" ?! In the examples I tried the results where the same (only d+ seems to add some spaces).