On 7/3/24 07:13, Rich Shepard wrote:
On Wed, 3 Jul 2024, David G. Johnston wrote:

Yeah, the simply cast suggested will not work. You’d have to apply an
expression that turns the current contents into an array. The current
contents are not likely to be an array literal.

David,

No, it's not now an array.

I thought that this expression would work, but it doesn't:
bustrac=# alter table people alter column email set data type varchar(64)[] using email::varchar(64)[];
RROR:  malformed array literal: "fr...@dmipx.com"
DETAIL:  Array value must start with "{" or dimension information.

If I correctly understand the error detail I'd need to change the contents
of that column for all 1280 rows to enclose the contents in curly braces
before I can convert the datatype to an array. Is that correct?

An example:

create table array_conv(id integer, email varchar(64));

insert into array_conv values (1, 'adrian.kla...@aklaver.com'), (2, 'akla...@example.com');

select * from array_conv ;
 id |           email
----+---------------------------
  1 | adrian.kla...@aklaver.com
  2 | akla...@example.com

alter table array_conv alter column email type varchar[] using array[email];

select * from array_conv ;
 id |            email
----+-----------------------------
  1 | {adrian.kla...@aklaver.com}
  2 | {akla...@example.com}

Rich



--
Adrian Klaver
adrian.kla...@aklaver.com



Reply via email to