
Running a shell command for each file to be archived has a lot of overhead and may not offer as much error checking as you want, or the exact semantics that you want. So, offer the option to call a loadable module for each file to be archived, rather than running a shell command. Also, add a 'basic_archive' contrib module as an example implementation that archives to a local directory. Nathan Bossart, with a little bit of kibitzing by me. Discussion: http://postgr.es/m/20220202224433.GA1036711@nathanxps13
23 lines
435 B
SQL
23 lines
435 B
SQL
CREATE TABLE test (a INT);
|
|
SELECT 1 FROM pg_switch_wal();
|
|
|
|
DO $$
|
|
DECLARE
|
|
archived bool;
|
|
loops int := 0;
|
|
BEGIN
|
|
LOOP
|
|
archived := count(*) > 0 FROM pg_ls_dir('.', false, false) a
|
|
WHERE a ~ '^[0-9A-F]{24}$';
|
|
IF archived OR loops > 120 * 10 THEN EXIT; END IF;
|
|
PERFORM pg_sleep(0.1);
|
|
loops := loops + 1;
|
|
END LOOP;
|
|
END
|
|
$$;
|
|
|
|
SELECT count(*) > 0 FROM pg_ls_dir('.', false, false) a
|
|
WHERE a ~ '^[0-9A-F]{24}$';
|
|
|
|
DROP TABLE test;
|