有时候,有人可能想要将的某些数据从一列移动到另一列。通过移动(相当于拷贝),我的意思是在执行操作之前新列最初为空,并且在执行操作之后应将旧列设置为空。在PostgreSQL中将数据从一列移动到另一列
我有定义为这样的表:
CREATE TABLE photos(id BIGSERIAL PRIMARY KEY, photo1 BYTEA, photo2 BYTEA);
假设有在photo1
包含一些数据的表中的条目,并且photo2
是NULL
。我想进行一个UPDATE
查询,其中photo1
变为NULL
,photo2
包含最初在photo1
中的数据。
我发出以下SQL命令(WHERE
子句简洁离开了):
UPDATE photos SET photo2 = photo1, photo1 = NULL;
看来工作。
我也试着这样说:
UPDATE photos SET photo1 = NULL, photo2 = photo1;
这也似乎工作。
但它保证工作?具体来说,可能photo1
被设置为NULL
之前photo2
设置为photo1
,从而导致我在两列中结束NULL
?
顺便说一句,这个标准UPDATE
语法似乎是低效的,当我BYTEA
s为大,为photo2
必须从photo1
,当指针的简单交换可能已经足以复制逐字节。也许有一种我不知道的更有效的方式?
是的,这是保证工作(和SQL标准要求) –