gpt4 book ai didi

postgresql - 如何在 Postgres 中使用数组作为变量?

转载 作者:行者123 更新时间:2023-11-29 11:29:15 39 4
gpt4 key购买 nike

我有这个 .sql 脚本:

DO $$
DECLARE
user_list integer[] = (select user_id from user where state = 'ACTIVE');
BEGIN
CREATE CREATE MATERIALIZED VIEW accounts_with_active_users AS
select * from accounts where user_account IN (user_list);
...

CREATE CREATE MATERIALIZED VIEW accounts_without_active_users AS
select * from accounts where user_account NOT IN (user_list);
...
END $$;

但是我总是有这个错误:

ERROR: cannot cast type integer to integer[]

我之前也尝试过使用 array 这个词,结果相同:

user_list integer[] = array(...)

最佳答案

您正在尝试将一个行集分配给一个数组。您可以改用 array_agg()

user_list integer[] = (select array_agg(user_id) from users where state = 'ACTIVE');

话虽这么说,恕我直言并不能真正帮助您创建物化 View 。只需内联您的选择

CREATE CREATE MATERIALIZED VIEW accounts_with_active_users AS
SELECT * FROM accounts WHERE user_account IN (
SELECT user_id FROM users WHERE state = 'ACTIVE'
);

或者创建一个active_users View

CREATE VIEW active_users AS SELECT * FROM users WHERE state = 'ACTIVE';

并改用它

CREATE CREATE MATERIALIZED VIEW accounts_with_active_users AS
SELECT * FROM accounts WHERE user_account IN (
SELECT user_id FROM active_users;
);

关于postgresql - 如何在 Postgres 中使用数组作为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44272446/

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