This table: australia=# \d users_users Table "public.users_users" Column | Type | Modifiers ----------------+--------------------------+-------------------------------- --------------------------------- userid | integer | not null default nextval('public.users_users_userid_seq'::text) sex | character(1) | not null suspended | boolean | not null default 'f' recurring | boolean | not null default 'f' referrer | integer | <snip fields> Check constraints: "$2" (NOT (recurring AND suspended)) "users_users_sex" ((sex = 'M'::bpchar) OR (sex = 'F'::bpchar)) Foreign Key constraints: $1 FOREIGN KEY (referrer) REFERENCES users_users(userid) ON UPDATE NO ACTION ON DELETE SET NULL
Is dumped like this: CREATE TABLE users_users ( userid SERIAL, sex character(1) NOT NULL, suspended boolean DEFAULT 'f' NOT NULL, recurring boolean DEFAULT 'f' NOT NULL, referrer integer, CHECK ((NOT (recurring AND suspended))), CONSTRAINT users_users_sex CHECK (((sex = 'M'::bpchar) OR (sex = 'F'::bpchar))) ); ALTER TABLE ONLY users_users ADD CONSTRAINT "$1" FOREIGN KEY (referrer) REFERENCES users_users(userid) ON UPDATE NO ACTION ON DELETE SET NULL; Restoring this fails with: ERROR: constraint "$1" already exists for relation "users_users" Solution: We need to dump constraint name always for CHECK, or suppress default names in ADD FOREIGN KEY. Chris ---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match