我已经找到了我要在 Oracle 和 SQL Server 上提出的问题的解决方案(我认为),但似乎无法将其转化为 Postgres 解决方案。我正在使用 Postgres 9.3.6。
这个想法是能够生成有关表内容的“元数据”以用于分析目的。这只能通过对每一列运行查询来完成(AFAIK),以便找出,比如说......最小/最大/计数值等。为了使过程自动化,最好让数据库生成查询,然后执行。
使用示例salesdata
表,我可以使用以下代码段为每一列生成一个选择查询,返回 min() 值:
SELECT 'SELECT min('||column_name||') as minval_'||column_name||' from salesdata '
FROM information_schema.columns
WHERE table_name = 'salesdata'
优点是无论列数如何,数据库都会生成代码。现在我想到了无数个地方来存储这些查询,可以是某种变量,也可以是表列,然后让这些查询执行。我想将生成的查询存储在一个变量中,然后使用EXECUTE
(or ) 语句执行它们,这是这里EXECUTE IMMEDIATE
使用的方法(见右窗格),但 Postgres 不会让我在函数之外声明一个变量,我一直在抓挠我的头脑与这将如何结合在一起,无论这是否是要遵循的方向,也许还有更简单的东西。
你有什么指示吗,我目前正在尝试这样的事情,受到其他问题的启发,但不知道我是否朝着正确的方向前进:
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$$
DECLARE
dyn_sql text;
BEGIN
dyn_sql := SELECT 'SELECT min('||column_name||') from salesdata'
FROM information_schema.columns
WHERE table_name = 'salesdata';
execute dyn_sql
END
$$ LANGUAGE PLPGSQL;