我在pg12的数据库里的表移动到另一个表空间,用alter table set tablespace ,但是这个语句会影响增删改查。有没有什么好的方法,在自动表空间的时候,不影响增删改查操作?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在PostgreSQL 12中,使用ALTER TABLE ... SET TABLESPACE
命令确实会锁定表,期间可能会影响增删改查操作。为了在移动表到另一个表空间时尽量减少对增删改查操作的影响,可以考虑以下策略:
创建新表结构:
CREATE TABLE new_table_name (LIKE old_table_name INCLUDING ALL) TABLESPACE new_tablespace;
数据迁移:
INSERT INTO ... SELECT
语句将原表的数据复制到新表中。这一步可以根据业务情况选择在低峰期执行,以减少对在线服务的影响。
INSERT INTO new_table_name SELECT * FROM old_table_name;
同步数据变更:
切换表名:
BEGIN;
ALTER TABLE old_table_name RENAME TO old_table_name_temp;
ALTER TABLE new_table_name RENAME TO old_table_name;
DROP TABLE old_table_name_temp;
COMMIT;
通过以上步骤,可以在很大程度上减少因直接使用ALTER TABLE ... SET TABLESPACE
命令导致的锁表时间,从而降低对增删改查操作的影响。