当前位置: 首页 > 知识库问答 >
问题:

postgreql:当行数非常大时,将一列复制到另一列

戚晨
2023-03-14

我有一个包含数百万行的表。

我有一个名为< code>time_from_device的列(类型为< code > time zone with time stamp )

id | name | t1 | t2 | t3 | time_from_device |
---------------------------------------------

现在我想添加一个名为created_at的列,其值将是Now()

但是在我设置默认值created_at为Now()之前,我想用time_from_device填充现有行created_at

所以我正在做以下事情

ALTER TABLE devicedata ADD COLUMN "created_at" timestamp with time zone;

这将创建一个新的列created_at值为NULL

现在,我想用< code > time _ from _ device-INTERVAL ' 1 hour ' 中的时间值填充该列

UPDATE devicedata SET created_at = time_from_device - INTERVAL '1 hour';

因为有数百万行,这个命令只是挂起

我怎么知道它是否工作

共有1个答案

东方俊力
2023-03-14

你做这件事的方法是正确的。耐心点。

一个潜在的问题可能是并发长时间运行的事务引起的行锁。确保没有这样的事务。

您可以检查相应会话的pg_stat_activity行中的wait_event:如果为NULL,则您的查询可以正常工作。

为了加速操作,您可以在更新表之前删除所有索引和约束,然后重新创建它们——您的操作可能需要停机时间。

在PostgreSQL中,事务的大小不是性能问题。

 类似资料:
  • 问题内容: 是否可以将SQL中表中的所有记录的数据从A列复制到B列? 问题答案: 这个怎么样 这将更新每一行。

  • 问题内容: 如何将值从一列复制到另一列?我有: 我希望有: 我应该有哪些mysql查询? 问题答案: 有关代码的简短答案是: 这是表名,周围是重音符号(又称“-”),因为这是MySQL惯例,用于转义关键字(在这种情况下为关键字)。 请注意,这是非常危险的查询,它将擦除表每行中列中的所有内容,并替换为(无论其值如何) 使用子句将查询限制为仅特定的行集更为常见:

  • 我主要在RPC模式下使用rabbitMq,但我还想将请求和响应消息复制到另一个队列。 最后,我想实现的是,外部消费者可以通过听一个队列来查看所有流量,我们称之为“日志队列”。 复制传入消息是可以的,我只需要使用扇出交换,或者使用与RPC调用使用的路由密钥相同的路由密钥将日志队列绑定到使用过的交换。 但我无法找到通过直接回复功能“扇出”发送的消息的方法。 到目前为止,我了解到响应消息以amqp的形式

  • 问题内容: 这个问题已经被问了很多遍了,而且似乎对其他人也有用,但是,当我从不同的DataFrame复制列(并且长度相同)时,我得到了值。 我需要这样 我尝试了以下方法 我得到以下内容 问题答案: 您的DataFrames的索引是不同的 (相应地,每列 的索引也不同 ),因此,当尝试将一个DataFrame的列分配给另一列时, pandas会尝试对齐索引,但这样做会失败,请插入NaN。 考虑以下示

  • 在SQL Server中,如何将数据从一个表复制/追加到具有相同架构的另一个表中? 编辑: 假设有一个问题 它使用与表2中相同的模式和数据创建表1。 有没有这样的短查询只将整个数据复制到一个已经存在的表中?

  • 问题内容: 如何从一个数据库复制到另一个数据库。 数据库名称visco 我想将所有表从visco数据库复制到新数据库名称作为neptune 我创建了一个没有任何表的数据库,然后尝试从database1.bak文件还原数据库,然后显示错误为 需要查询帮助 问题答案: 使用SQL Server Management Studio: 选项1 ->右键单击要复制的数据库 ->选择“任务”>“生成脚本” -