Unten ist eine großartige Funktion, um die tatsächliche Anzahl aller Tabellen in der PostgreSQL-Datenbank zu überprüfen. Ich fand es here.Wie aktualisiert man die Ergebnisse des EXECUTE-Formatblocks in Funktion (PostgreSQL)
Von meinem lokalen Test scheint es, dass die Funktion das Ergebnis nur zurückgibt, nachdem alle 100 Tabellen gezählt wurden.
Ich versuche, es praktischer zu machen. Wenn wir das Ergebnis jeder Tabellenzählung speichern könnten, sobald es mit der Tabelle fertig ist, können wir den Fortschritt aller Zähljobs überprüfen, anstatt auf das Ende zu warten.
Ich denke, wenn ich das Ergebnis in dieser Funktion sofort nach Abschluss der ersten Tabelle aktualisieren könnte, wird es für meine Anforderung groß sein.
Können Sie mich wissen lassen, wie ich das Ergebnis in die Tabelle aktualisieren kann, nachdem diese Funktion das Zählen der ersten Tabelle beendet hat?
CREATE FUNCTION rowcount_all(schema_name text default 'public')
RETURNS table(table_name text, cnt bigint) as
$$
declare
table_name text;
begin
for table_name in SELECT c.relname FROM pg_class c
JOIN pg_namespace s ON (c.relnamespace=s.oid)
WHERE c.relkind = 'r' AND s.nspname=schema_name
ORDER BY c.relname
LOOP
RETURN QUERY EXECUTE format('select count(*) from %I.%I',
table_name, schema_name, table_name);
END LOOP;
end
$$ language plpgsql;
-- Query
WITH rc(schema_name,tbl) AS (
select s.n,rowcount_all(s.n) from (values ('schema1'),('schema2')) as s(n)
)
SELECT schema_name,(tbl).* FROM rc;
Aktualisiert
habe ich beschlossen, ein Shell-Skript zu verwenden, um die Funktion unten als Hintergrundprozess zu laufen. Die Funktion würde eine Verarbeitungsprotokolldatei erzeugen, so dass ich den aktuellen Prozess überprüfen kann.
Wunderbarer Ansatz. Sie meinen, dass ich ohne DBlink-Implementierung die Tabelle counts nicht dynamisch abfragen kann, wie es nach Abschluss aller Zähljobs geschehen würde? – Sigularity
Meine externe Anwendung konnte alle 10 Sekunden Tabelle_Counts-Tabellen abfragen, also denke ich, dass DBlink nicht implementiert werden muss? – Sigularity
Ich frage vielleicht nach 'autonome Transaktion' in der Funktion. Ich kann die Tabelle nicht abfragen, während die Funktion funktioniert. – Sigularity