mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	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;
 |