gpt4 book ai didi

sql - 如何在 postgresql 中创建 *swap 表(带/索引)

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:19 24 4
gpt4 key购买 nike

我在 postgres 中有一个 students 表,它是通过外部源填充的。每天晚上我们填充 students_swap 表,然后在长时间运行的操作完成后,我们将其重命名为 students,然后原始表变为 students_swap第二天使用。

这样做的问题是,当我们向原始表添加新列或索引时,我们必须记住在交换表上也这样做。我正在尝试通过以下方式自动执行其中的一些操作:

-- Drop the swap table if it's already there...
DROP TABLE IF EXISTS students_swap;

-- Recreate the swap table using the original as a template...
CREATE TABLE students_swap AS SELECT * FROM students WHERE 1=2;

... populate the swap table ....

ALTER TABLE students RENAME TO students_temp;
ALTER TABLE students_swap RENAME TO ps_students;
ALTER TABLE students_temp RENAME TO students_swap;

这对于创建表结构很有效,但没有为交换表创建索引。

我的问题是除了表结构之外,如何复制所有索引以确保我的原始表和交换表保持同步?

最佳答案

改为使用 create table ... like:

CREATE TABLE students_swap (LIKE students INCLUDING ALL);

这将包括索引、主键和检查约束,但不会重新创建外键。

编辑:

INCLUDING ALL 还将复制由序列填充的列的默认设置(例如定义为 serial 的列)。听起来好像你想要那样。如果您不想这样,请改用 INCLUDING INDEXES INCLUDING CONSTRAINTS

关于sql - 如何在 postgresql 中创建 *swap 表(带/索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com