小编LaV*_*che的帖子

将 postgres GENERATED 列转换为常规非生成列(无需 DROP 就地)

我使用的是 postgres 13.3,并且我已经有一个现有的表,其中有一GENERATED列,例如:

CREATE TABLE test_table (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    the_column_to_alter bool NOT NULL GENERATED ALWAYS AS (2 > 1) STORED,
    CONSTRAINT test_table2_pkey PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

但我现在改变了主意,我希望它只是一个常规的非生成列,我可以手动编辑......

  • 但我想避免重新DROP创建该列
  • 我想保留目前列中已有的值

这可能吗?ALTER对列执行此操作的查询是什么the_column_to_alter

postgresql alter-table generated-columns

5
推荐指数
1
解决办法
2592
查看次数

SELECT 中的廉价函数如何使整个查询变慢?

我将 Postgres 13.3 与内部和外部查询一起使用,它们都只产生一行(只是一些关于行数的统计数据)。

我不明白为什么下面的 Query2 比 Query1 慢得多。它们基本上应该几乎完全相同,最多可能只有几毫秒的差异......

查询 1:需要 49 秒

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) FROM racing.xday) AS xday_row_count
        OFFSET 0 -- this is to prevent inlining
)

SELECT
            t1.all_count,
            t1.all_count-t1.todo_count AS done_count,
            t1.todo_count,
            t1.xday_row_count
FROM t1;
Run Code Online (Sandbox Code Playgroud)

查询 2:需要 4 分 30 秒

我只添加了一行:

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) …
Run Code Online (Sandbox Code Playgroud)

postgresql cte parallelism functions postgresql-performance

1
推荐指数
1
解决办法
160
查看次数