擅长:python、mysql、java
<p>您肯定希望在服务器上执行此操作,而不是在应用程序级别执行此操作,因为应用程序和服务器之间存在许多往返,而且中间结果中可能存在重复数据。你知道吗</p>
<p>因为需要处理1000多个表,所以应该使用系统目录并动态查询这些表。您需要一个函数来有效地执行此操作:</p>
<pre><code>CREATE FUNCTION get_all_dates() RETURNS SETOF date AS $$
DECLARE
tbl name;
BEGIN
FOR tbl IN SELECT 'public.' || tablename FROM pg_tables WHERE schemaname = 'public' LOOP
RETURN QUERY EXECUTE 'SELECT DISTINCT date::date FROM ' || tbl;
END LOOP
END; $$ LANGUAGE plpgsql;
</code></pre>
<p>这将处理<code>public</code>模式中的所有表;根据需要进行更改。如果表在多个模式中,则需要在存储表的位置插入附加逻辑,或者可以将模式名作为函数的参数,多次调用函数并<code>UNION</code>结果。你知道吗</p>
<p>注意,您可能会从多个表中获得重复的<code>date</code>。您可以在调用函数的语句中删除这些重复项:</p>
<pre><code>SELECT DISTINCT * FROM get_all_dates() ORDER BY 1;
</code></pre>
<p>该函数在内存中创建一个结果集,但如果1000+个表中的行中的不同日期数非常大,则结果将写入磁盘。如果希望发生这种情况,那么最好在函数的开头创建一个临时表,并将日期插入临时表中。你知道吗</p>