Database 如何使用Postgres触发器对一个表中的两列进行双重写入?
我想更改PostgreSQL中的列类型。假设从INT到VARCHAR。安全的方法如下:Database 如何使用Postgres触发器对一个表中的两列进行双重写入?,database,postgresql,triggers,locking,Database,Postgresql,Triggers,Locking,我想更改PostgreSQL中的列类型。假设从INT到VARCHAR。安全的方法如下: 添加一个新列new. 对两列进行双重写入(例如,在插入/更新触发器之前使用) 使用旧列值的副本回填新列 在单个事务和显式的LOCK语句中,将重命名为old和new 删除旧列 问题是如何在插入/更新触发器之前创建它?(2) 在本例中使用一个简单的表foo CREATE TABLE foo (id int, idstr varchar); 创建一个简单函数,为新列指定值idstr CREATE OR REPLA
new.
)
LOCK
语句中,将
重命名为old
和new
问题是如何在插入/更新触发器之前创建它?(2) 在本例中使用一个简单的表foo
CREATE TABLE foo (id int, idstr varchar);
创建一个简单函数,为新列指定值idstr
CREATE OR REPLACE FUNCTION bluegreen ()
RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF NEW.idstr IS NULL THEN
NEW.idstr = NEW.id::varchar;
END IF;
IF NEW.id IS NULL THEN
NEW.id = NEW.idstr::int;
END IF;
RETURN NEW;
END;
$$;
并使用先前创建的函数在表上创建触发器
CREATE TRIGGER foo_trg
BEFORE INSERT OR UPDATE ON foo
FOR EACH ROW
EXECUTE PROCEDURE bluegreen();
有关触发器的详细信息为什么不?:
ALTER TABLE some_TABLE ALTER COLUMN使用_col::varchar
根据表大小,您将锁定表一段时间