Обсуждение: Do I really have to convert text to varchar and varchar to varchar[] to do an INSERT?
Do I really have to convert text to varchar and varchar to varchar[] to do an INSERT?
От
 
		    	Mary Anderson
		    Дата:
		        Hi,
    Here is my code:
    INSERT INTO location_types (lo_location_type_id, lo_location_type)
    VALUES (3, 'region');
Somehow, variants of this statement generate strange error messages.
This one gets
ERROR: array value must start with "{" or dimension information.
Another try with a UNION SELECT to persuade it to insert multiple rows
gave me
ERROR: Column lt_location_type is of CHARACTER VARYING[] but expression
is of type text.
So I changed it to
INSERT INTO location_types (lo_location_type_id, lo_location_type)
    VALUES (3, VARCHAR 'region');
Here is the error message
ERROR: column "lt_location_type is of type character varying[] but
expression is of type character varying.
HINT: You will need to rewrite or cast the expression.
Something is going on with pgsql which I truly don't understand.  After
twenty years of working with SQL, I am pretty sure i know how to write a
simple INSERT statement!  Explanations would be greatly appreciated.
			
		
> Here is the error message
>
> ERROR: column "lt_location_type is of type character varying[] but
> expression is of type character varying.
>
> HINT: You will need to rewrite or cast the expression.
>
> Something is going on with pgsql which I truly don't understand.
> After twenty years of working with SQL, I am pretty sure i know how to
> write a simple INSERT statement!  Explanations would be greatly
> appreciated.
Looks like your lt_location_type column is defined as a varchar array
(i.e. VARCHAR[]), so it's expecting you to populate it with a varchar
array value (e.g. '{''foo'', ''bar''}') , as opposed to simple
varchar/text values (e.g. 'foo'). A simple alter table should resolve it
for you:
ALTER TABLE location_types ALTER COLUMN lt_location_type TYPE VARCHAR;
Jon