没有动态SQL通常是不可能的。但是,对于您指定的用例,可以使用
inheritance
:
CREATE TABLE schemas (
unique_id VARCHAR(32) PRIMARY KEY,
data TEXT
);
INSERT INTO schemas VALUES('users','foo'),('holidays','bar');
CREATE TABLE mydata (
id BIGSERIAL,
data text
);
CREATE TABLE users ( ) INHERITS (mydata);
INSERT INTO users(data) VALUES('user1'),('user2');
CREATE TABLE holidays ( ) INHERITS (mydata);
INSERT INTO holidays(data) VALUES('hol1'),('hol2');
SELECT s.unique_id, s.data as schema_data, d.data as table_data
FROM schemas s, mydata d, pg_class
WHERE d.tableoid = pg_class.oid AND s.unique_id = pg_class.relname;
unique_id | schema_data | table_data
-----------+-------------+------------
holidays | bar | hol1
holidays | bar | hol2
users | foo | user1
users | foo | user2
(4 rows)
SELECT
从父表中删除会导致PostgreSQL
UNION
父表的行以及从每个子表继承的列的查询。
如果您的表已经与继承模型兼容,则可以
ALTER
他们介绍它:
ALTER TABLE users INHERIT mydata;