Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在PostgreSQL中将数据从一列移动到另一列

在PostgreSQL中将数据从一列移动到另一列
EN

Stack Overflow用户
提问于 2017-07-08 19:52:01
回答 1查看 5.2K关注 0票数 5

有时,一个人可能想要将一些数据从一列移动到另一列。通过移动(在constrast中表示复制),我的意思是在执行操作之前,新列最初是空的,执行操作后旧列应该设置为空。

我有一张表的定义如下:

CREATE TABLE photos(id BIGSERIAL PRIMARY KEY, photo1 BYTEA, photo2 BYTEA);

假设表中有一个条目,其中photo1包含一些数据,而photo2NULL。我想做一个UPDATE查询,photo1变成NULLphoto2包含最初在photo1中的数据。

我发出以下SQL命令(为了简洁起见,省略了WHERE子句):

UPDATE photos SET photo2 = photo1, photo1 = NULL;

好像很管用。

我也试过这样做:

UPDATE photos SET photo1 = NULL, photo2 = photo1;

这似乎也奏效了。

但它能起作用吗?具体来说,在将photo1设置为photo1之前,是否可以将photo2设置为photo1,从而导致我在两列中都使用了NULL

顺便说一句,当我的UPDATE很大时,这个标准的BYTEA语法似乎效率低下,因为photo2必须逐字节地从photo1复制,而只要简单地交换指针就够了。也许还有一种我不知道的更有效的方法?

EN

回答 1

Stack Overflow用户

发布于 2017-07-08 21:55:10

这绝对安全。

列- UPDATE中的引用引用的是旧列,而不是新值。实际上,无法从另一列引用计算出来的新值。

见,例如。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE x (a integer, b integer);
INSERT INTO x (a,b) VALUES (1,1), (2,2);

UPDATE x SET a = a + 1, b = a + b;

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test=> SELECT * FROM x;
 a | b 
---+---
 2 | 2
 3 | 4

..。作业的顺序并不重要。如果你试图把一个值相乘,你就会得到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test=> UPDATE x SET a = a + 1, a = a + 1;
ERROR:  multiple assignments to same column "a"

因为如果两个表达式都引用旧的元组值,并且顺序没有意义,那么多次分配给同一列是没有意义的。

但是,为了避免在本例中重写完整的表,我只需要使用旧名称的ALTER TABLE ... ALTER COLUMN ... RENAME ...然后CREATE新列。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44992802

复制
相关文章
PQ基础-数据转换4:删列、移列、添加索引列
本文通过一个例子,综合体现常用的删列、移列、添加索引列操作方法。数据样式及要求如下:
大海Power
2021/08/31
1.7K0
PostgreSQL 列转行问题
SELECT relative_label_content FROM frk_s.label_cor_gene
全栈程序员站长
2022/07/04
1.1K0
怎么直接把一列的部分数据换成另一列里的数据?
小勤:这个我知道啊。但是,能不能不增加列,直接转换吗?比如用函数Table.TranformColumns?
大海Power
2021/08/30
2K0
Postgresql 强制修改列的类型
当列的类型为字符类型,当我们想修改为数值类型时,是无法成功的,这个时候我们可以通过以下方法进行修改。
飞奔去旅行
2019/06/13
2.9K0
在Excel里,如何查找A列的数据是否在D列到G列里
Excel数据查找,相信多数的同学都不陌生,我们经常会使用vlookup等各类查找函数,进行数据的匹配查找。
matinal
2023/10/13
2140
在Excel里,如何查找A列的数据是否在D列到G列里
Postgresql在哪里使用列统计信息?
对pg_statistic表的查询都是走syscache的,要找到所有使用列统计信息地方,遍历系统表索引即可
mingjie
2023/10/13
1590
Postgresql在哪里使用列统计信息?
PostgreSQL表用户列最大个数
有些业务可能有这么个需求:需要增加用户列,即通过ALTER TABLE ... ADD...来添加用户列。那么PG/GP中是否会有列个数的限制呢?
yzsDBA
2023/09/08
3250
PostgreSQL表用户列最大个数
在Excel中将某一列的格式通过数据分列彻底变为文本格式
我们平常使用excel的时候,都是选中一列,然后直接更改它的格式,但是这种方式并不能彻底改变已有数据的原格式,如下图中的5592689这一个CELL中的数据,尽管我们将整个列都更改为文本类型,但实际上它这个数据仍然是数值类型,在很多场景下不能满足我们的需求,如数据库在导入Excel表格时,表格中的列数据需要文本形式,如果不是文本形式,导入的数据在数据库中会出现错误(不是想要的数据,如789 数据库中为789.0)。
翎野君
2023/05/26
1.5K0
在Excel中将某一列的格式通过数据分列彻底变为文本格式
PostgreSQL列存增加更新和删除功能
Hydra是企业级数据仓库的开源替代品。速度快且功能丰富,开发人员可以更快的构建更好的分析。支持列存PG的更新和删除是#1客户功能请求,现在GA了。之前博文“如何为分析构建最快的PG数据库”中,回顾了Hydra团队如何将列存、向量化和查询并行化添加到PG中,以及使用ClickBench的基准测试结果。目前对WHERE进行了向量化。但未用SIMD,声称很快会提供。平均下来,查询性能比基本PG提高了23倍!这也太夸张了吧,可以弄下来测试下,文末有源码地址。
yzsDBA
2023/05/25
1.2K0
PostgreSQL列存增加更新和删除功能
问与答112:如何查找一列中的内容是否在另一列中并将找到的字符添加颜色?
Q:我在列D的单元格中存放着一些数据,每个单元格中的多个数据使用换行分开,列E是对列D中数据的相应描述,我需要在列E的单元格中查找是否存在列D中的数据,并将找到的数据标上颜色,如下图1所示。
fanjy
2021/04/21
7.3K0
问与答112:如何查找一列中的内容是否在另一列中并将找到的字符添加颜色?
用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
数据库中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
全栈程序员站长
2022/07/09
1.7K0
SQL 将多列的数据转到一列
如题。假设我们要把 emp 表中的 ename、job 和 sal 字段的值整合到一列中,每个员工的数据(按照 ename -> job -> sal 的顺序展示)是紧挨在一块,员工之间使用空行隔开。
白日梦想家
2020/09/08
5.5K0
Pandas基础:在Pandas数据框架中移动列
有时候,我们需要在pandas数据框架内移动一列,shift()方法提供了一种方便的方法来实现。
fanjy
2022/06/04
3.2K0
Pandas基础:在Pandas数据框架中移动列
PBI-基础入门:添加列与新建列(计算列)
大海:在Power BI里增加列有2种方法,一种是咱们在学Power Query里的“添加列”方法,还有一种是在PowerPivot里的新建“计算列”方法。具体操作方法如下:
大海Power
2021/08/30
7.6K0
SQL如何将一个列中值内的逗号分割成另一列
例如某个列是这样的: 7890 – 20th Ave E Apt 2A, Seattle, VA 9012 W Capital Way, Tacoma, CA 5678 Old Redmond Rd, Fletcher, OK 3456 Coventry House Miner Rd, Richmond, TX
繁华是客
2023/03/03
1.8K0
TiFlash:并非另一个 T + 1 列存数据库
在 上篇关于 TiFlash 的文章 发布后,我们收到了很多伙伴们的反馈,大家有各种各样的疑问,包括 TiFlash 是不是 T + 1 列存数据库?为啥实时写入也很快?读压力大怎么办?节点挂了怎么办?业务怎么接入?……今天我们就来详细回复一下大家的问题,希望能对大家理解和实践 TiFlash 有所帮助。
PingCAP
2020/03/23
1.5K0
TiFlash:并非另一个 T + 1 列存数据库
怎样能自动按列01 列02 最大为列99,来设置列标题?
前几天在Python最强王者交流群有个粉丝咨询了这个问题:获取到数据表的列数比较简单,一般不超过99列,怎样能自动按列01 列02 最大为列99,来设置列标题?一劳永逸,以后这类场景都这样套用。
前端皮皮
2022/12/19
1.1K0
怎样能自动按列01 列02  最大为列99,来设置列标题?
Pandas | 如何新增数据列?
在数据分析时,原始数据往往不能满足我们的需求,经常需要按照一定条件创建新的数据列或者修改原有数据列,然后进行后续分析。
生信real
2022/12/20
2.1K0
散列算法与散列码
一、引入 1 /** 2 * Description:新建一个类作为map的key 3 */ 4 public class Groundhog 5 { 6 protected int number; 7 8 public Groundhog(){ 9 } 10 public Groundhog(int number) 11 { 12 this.number = number; 13 } 14 15 @Overr
JMCui
2018/03/15
1.5K0
散列算法与散列码
点击加载更多

相似问题

在MySQL中将数据从一列移动到另一列

27

在Excel中将部分数据从一列移动到另一列

49

如何在mongodb中将数据从一列移动到另一列?

11

在单个事务/api调用中将数据从一列移动到另一列

12

如何在Python DataFrame中将数据从一列移动到另一列

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文