And*_*ine 5 postgresql postgresql-9.6
我有这个.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 $$;
Run Code Online (Sandbox Code Playgroud)
但是我总是有这个错误:
ERROR: cannot cast type integer to integer[]
Run Code Online (Sandbox Code Playgroud)
我也尝试过用这个词array之前有相同的结果:
user_list integer[] = array(...)
Run Code Online (Sandbox Code Playgroud)
您正在尝试将行集分配给数组。你可以用array_agg()它代替。
user_list integer[] = (select array_agg(user_id) from users where state = 'ACTIVE');
Run Code Online (Sandbox Code Playgroud)
话虽如此,恕我直言,这并不能真正帮助您创建物化视图。只需内联您的选择
CREATE CREATE MATERIALIZED VIEW accounts_with_active_users AS
SELECT * FROM accounts WHERE user_account IN (
SELECT user_id FROM users WHERE state = 'ACTIVE'
);
Run Code Online (Sandbox Code Playgroud)
或创建一个active_users视图
CREATE VIEW active_users AS SELECT * FROM users WHERE state = 'ACTIVE';
Run Code Online (Sandbox Code Playgroud)
并用它代替
CREATE CREATE MATERIALIZED VIEW accounts_with_active_users AS
SELECT * FROM accounts WHERE user_account IN (
SELECT user_id FROM active_users;
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3397 次 |
| 最近记录: |