postgresql 使用子查询创建分区表

fdx2calv  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(185)

我想根据另一个查询的结果创建一个未记录的表

Create table table_1
as
select * from table_2
where <<conditions>>
partition by LIST(col);

显然这会抛出一个错误,我甚至无法找到它是否可能在postgres或不。
我很感激任何帮助。
编辑:我知道我可以通过首先创建表,然后根据上面的select语句插入数据来完成。然而,我正在寻找一个简单的方法来做一步。

of1yzvn4

of1yzvn41#

这是不可能的,因为您还必须创建子表和分区。但是你可以做的是,使用LIKE复制你需要的结构,创建分区,然后使用INSERT。. SELECT ..获取您需要的数据。
为了提高性能,最好将其 Package 到单个事务中。
就像这样:

BEGIN;

    CREATE TABLE IF NOT EXISTS new_table(
        LIKE foo INCLUDING ALL -- copy the entire structue
    )
    PARTITION BY RANGE(i);

    CREATE TABLE p_1_500 PARTITION OF new_table
            FOR VALUES FROM (1) TO (500);
    CREATE TABLE p_500_1000 PARTITION OF new_table
            FOR VALUES FROM (500) TO (1000);
    CREATE TABLE p_1000_1500 PARTITION OF new_table
            FOR VALUES FROM (1000) TO (MAXVALUE);
            
    INSERT INTO new_table(i)
    SELECT *
    FROM foo
    WHERE i < 500;

COMMIT; -- one large commit for all work

相关问题