postgresql - 将行从主表移动到具有外键约束的子表
问题描述
我有一个名为posts
~10m 行的表,它降低了我的查询性能,所以我正在考虑使用分区到子表来优化它,其中每个子表将包含一年的记录。
我目前有以下策略:
创建没有
INHERIT
约束的子表CREATE TABLE posts_2017 AS (SELECT * from posts where inserted_at < '2018-01-01 00:00:00');
之后创建继承关系
ALTER TABLE posts_2017 inherit posts;
之后将约束添加
CHECK
到子表
现在它运行良好,但现在如果我查询SELECT * from posts
,我会得到 2017 年帖子的重复结果。我的下一步是使用另一个查询从主表中删除它们
DELETE FROM ONLY posts where inserted_at < '2018-01-01 00:00:00'
但我遇到了另一个障碍,另一个表实际上有一个外键引用那些 2017 年的记录。
例如,假设我有一个users_posts
只有user_id
和post_id
列的表,如果此表中的一行引用 2017 年的帖子,我的删除查询将失败。
在这种情况下我有什么选择?
解决方案
推荐阅读
- haskell - Haskell Emacs haskell-mode:运行“Ch f haskell-mode”以获取有关如何设置 Haskell 交互模式的说明
- python - 有没有什么方法可以不使用任何分隔符写入 Pandas 数据帧?
- excel - 用于输入信息的用户表单,当被召回时将显示之前输入的内容
- python - 在 Kivy 中定位选项卡式面板标题
- google-sheets - 如果列与其他单元格条件匹配,则动态查询以选择列
- kotlin - Apache POI 将单元格评估为 ErrorEval [#REF!],但结果工作簿没有任何 #REF!错误
- php - 使用 Guzzle 将请求 POST 到另一个站点
- python - 我正在尝试部署我的仪表板应用程序,但我正在接收包含我的数据的本地 txt 文件。我怎样才能做到这一点?
- android - Kotlin:有没有办法从按钮中获取背景颜色?
- winapi - 尽管 FlushConsoleInputBuffer MASM,输入缓冲区仍保留旧输入