CREATE TABLE t (
part int,
val int
) PARTITION BY RANGE (part);
CREATE TABLE t_z PARTITION OF t FOR VALUES FROM (0) TO (1);
CREATE TABLE t_4 PARTITION OF t FOR VALUES FROM (6) TO (7);
CREATE TABLE t_6 PARTITION OF t FOR VALUES FROM (2) TO (3);
CREATE TABLE t_1 PARTITION OF t FOR VALUES FROM (10) TO (12);
CREATE TABLE t_d PARTITION OF t FOR VALUES FROM (3) TO (4);
CREATE TABLE t_b PARTITION OF t FOR VALUES FROM (4) TO (5);
CREATE OR REPLACE FUNCTION create_stv(t text, name text)
RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
EXECUTE (
SELECT format(
'CREATE OR REPLACE VIEW %I AS %s;',
name,
string_agg(
'TABLE ' || inhrelid::regclass, ' UNION ALL '
ORDER BY RANDOM() ASC
)
)
FROM pg_inherits
WHERE inhparent = t::regclass
);
END;
$$;
SELECT create_stv('t', 't_all');
SELECT pg_get_viewdef('t_all'::regclass);
EXPLAIN
SELECT * FROM t_all;