改变列标记类型 varchar('800');

ALTER COLUMN token TYPE varchar('800');

如何将“800”(字符串)转换为 800(整数)

我用过

ALTER COLUMN token TYPE varchar('800'::integer)

ALTER COLUMN token TYPE varchar(CAST('800' as integer))

但还是不行

请帮忙,谢谢

一些建议基于:

create table t (fld_1 varchar);
 \d t
                      Table "public.t"
 Column |       Type        | Collation | Nullable | Default 
--------+-------------------+-----------+----------+---------
 fld_1  | character varying |           |          | 

psql中:

\set type_length '10'
alter table t alter COLUMN fld_1 type varchar(:type_length);
ALTER TABLE

\d t
                        Table "public.t"
 Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------
 fld_1  | character varying(10) |           |          | 

使用plpgsql

CREATE OR REPLACE FUNCTION public.type_change(type_length character varying)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
BEGIN
    execute format('alter table t alter COLUMN fld_1 type varchar(%s)', type_length);
RETURN;
END;
$function$

select type_change('50');
 type_change 
-------------
 
 \d t
                        Table "public.t"
 Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------
 fld_1  | character varying(50) |           |          | 

您可以扩展上面的内容以使用 table 和列名,使其更通用。

当然,另一种选择是在您用来与数据库交互的任何 client/language 中动态构建查询。