POSTGRES: change the type of the primary key from varchar to uuid and is referenced by other non-traditional

I have a client and user of tables, I want to change their identifiers from a character changing to uuid.

=>\d customers; Table "public.customers" Column | Type | Modifiers ----------+-------------------+----------- id | character varying | not null name | character varying | not null Indexes: "customers_pkey" PRIMARY KEY, btree (id) "customers_name_key" UNIQUE CONSTRAINT, btree (name) Referenced by: TABLE "users" CONSTRAINT "users_customer_id_fkey" FOREIGN KEY (customer_id) REFERENCES customers(id) DEFERRABLE INITIALLY DEFERRED =>\d users; Table "public.users" Column | Type | Modifiers ---------------+-------------------+----------- id | character varying | not null name | character varying | not null customer_id | character varying | not null login | character varying | not null Indexes: "users_pkey" PRIMARY KEY, btree (id) "users_login_key" UNIQUE CONSTRAINT, btree (login) Foreign-key constraints: "users_customer_id_fkey" FOREIGN KEY (customer_id) REFERENCES customers(id) DEFERRABLE INITIALLY DEFERRED 

I tried:

 =>begin; set constraints all deferred; ALTER TABLE users alter customer_id type uuid using customer_id::uuid; ALTER TABLE customers alter id type uuid using id::uuid; end; 

But after this line I got an incompatible error like

 => ALTER TABLE customers alter id type uuid using id::uuid; ERROR: foreign key constraint "users_customer_id_fkey" cannot be implemented DETAIL: Key columns "customer_id" and "id" are of incompatible types: character varying and uuid. 

Any help would be appreciated. Thanks

+5
source share

Source: https://habr.com/ru/post/1234878/


All Articles