Skip to content

Latest commit

 

History

History
34 lines (27 loc) · 1.07 KB

switch-non-castable-column-type-with-using-clause.md

File metadata and controls

34 lines (27 loc) · 1.07 KB

Switch Non-Castable Column Type With Using Clause

With certain data types, such as from int to bigint or timestamptz to timestamp, there is an automatic type casting that can take place with existing data. This means Postgres knows how to handle a data type change like:

alter table users
  alter column id
  set data type bigint;

With other data types, such as int to uuid, there is no way for Postgres to know how to automatically cast it. To change the data type of a column in a scenario like this, you have to tell Postgres how to handle the conversion with a using clause.

alter table users
  alter column id
  set data type uuid using (gen_random_uuid());

In this instance, the using clause tells Postgres to ignore the existing integer id value and use the gen_random_uuid() function to generate a UUID value to take its place.

The using clause can also reference the existing column value as part of its type cast.

See the alter table documentation for more details on this.