gpt4 book ai didi

postgresql - 在 PostgreSQL 8.3.8 中更改类型

转载 作者:行者123 更新时间:2023-11-29 13:59:30 27 4
gpt4 key购买 nike

我正在使用一种包含字符 (6) 字段的数据类型。我想将其更改为 varchar(7) 字段。不幸的是,我在使用 PostgreSQL 8.3.8 的服务器上,而 ALTER TYPE 当时没有太多功能。此列也被多个函数使用,因此它不允许我删除该属性并使用正确的参数放入一个新的属性。

我的意思是:

mydb=# \d t_emp_start_stop_2
Composite type "public.t_emp_start_stop_2"
Column | Type
--------------+--------------
employee_id | character(6)
normal_start | integer
normal_stop | integer
normal_lunch | integer

我想用 varchar(7) 字段替换 employee_id。有没有办法干净地做到这一点?

最佳答案

如果您可以忍受更改类型名称,并且能够更改所有相关函数的类型,那么您可能可以转移到新类型。

-- create a new type
CREATE TYPE public.t_emp_start_stop_2_new AS (
employee_id VARCHAR(7),
normal_start INTEGER,
normal_stop INTEGER,
normal_lunch INTEGER
);

-- create a function that takes the old type and outputs the new type
CREATE OR REPLACE FUNCTION t_emp_start_stop_2_new_converter(value1 t_emp_start_stop_2)
RETURNS t_emp_start_stop_2_new AS $$
DECLARE
newtype t_emp_start_stop_2_new;
BEGIN
newtype.employee_id = value1.employee_id;
newtype.normal_start = value1.normal_start;
newtype.normal_stop = value1.normal_stop;
newtype.normal_lunch = value1.normal_lunch;
return newtype;
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT;

-- create a cast from the old to new type
CREATE CAST (t_emp_start_stop_2 AS t_emp_start_stop_2_new)
WITH FUNCTION t_emp_start_stop_2_new_converter(t_emp_start_stop_2);

-- update table to use new type
ALTER TABLE abc
ALTER xyz TYPE t_emp_start_stop_2_new
USING xyz::t_emp_start_stop_2_new;

-- UPDATE ALL EXISTING FUNCTIONS TO USE NEW TYPE HERE

-- drop old cast, function and type
DROP CAST (t_emp_start_stop_2 AS t_emp_start_stop_2_new);
DROP FUNCTION t_emp_start_stop_2_new_converter(t_emp_start_stop_2);
DROP TYPE t_emp_start_stop_2;

关于postgresql - 在 PostgreSQL 8.3.8 中更改类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com