334

Entering the following command into a PostgreSQL interactive terminal results in an error:

ALTER TABLE tbl_name ALTER COLUMN col_name varchar (11);

What is the correct command to alter the data type of a column?

3 Answers 3

508

See documentation here: http://www.postgresql.org/docs/current/interactive/sql-altertable.html

ALTER TABLE tbl_name ALTER COLUMN col_name TYPE varchar (11);
Sign up to request clarification or add additional context in comments.

7 Comments

For some other cases, you might need to specify the way to cast like ALTER TABLE tbl_name ALTER COLUMN col_name TYPE integer USING col_name::integer;
@Nobu why do we have to do this in some cases and what are those cases?
@Darth.Vader you might need to do this when there is data already existing in the column that can't be cast automatically.
Another example for casting: I had a jsonb column with existing data that I needed to convert to text.
it's worth mentioning you may want to cast twice in some cases as follows col_name::text::real;
|
80

If data already exists in the column you should do:

ALTER TABLE tbl_name ALTER COLUMN col_name TYPE integer USING (NULLIF(col_name, '')::integer);

As pointed out by @nobu and @jonathan-porter in the comments to @derek-kromm's answer, somewhat cryptically.

1 Comment

What about if the column was a NUMERIC with a DEFAULT value. How do you remove or change the default values
24

Cool @derek-kromm, Your answer is accepted and correct, But I am wondering if we need to alter more than the column. Here is how we can do.

ALTER TABLE tbl_name 
ALTER COLUMN col_name TYPE varchar (11), 
ALTER COLUMN col_name2 TYPE varchar (11),
ALTER COLUMN col_name3 TYPE varchar (11);

Documentation

Cheers!! Read Simple Write Simple

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.