mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Improve a bit the tests of pg_walinspect
This commit improves the tests of pg_walinspect on a few things: - Remove aggregates for queries that should fail. If the code is reworked in such a way that the behavior of these queries is changed, we would get more input from them, written this way. - Expect at least one record reported in the valid queries doing scans across ranges, rather than zero records. - Adjust a few comments, for consistency. Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACVaoXW3nJD9zq8E66BEf-phgJfFcKRVJq9GXkuX0b3ULQ@mail.gmail.com
This commit is contained in:
		
							parent
							
								
									8fba928fd7
								
							
						
					
					
						commit
						4f1882b960
					
				| @ -1,4 +1,4 @@ | |||||||
| -- test old extension version entry points | -- Test old extension version entry points. | ||||||
| CREATE EXTENSION pg_walinspect WITH VERSION '1.0'; | CREATE EXTENSION pg_walinspect WITH VERSION '1.0'; | ||||||
| -- Mask DETAIL messages as these could refer to current LSN positions. | -- Mask DETAIL messages as these could refer to current LSN positions. | ||||||
| \set VERBOSITY terse | \set VERBOSITY terse | ||||||
| @ -28,7 +28,7 @@ SELECT 'init' FROM pg_create_physical_replication_slot('regress_pg_walinspect_sl | |||||||
| CREATE TABLE sample_tbl(col1 int, col2 int); | CREATE TABLE sample_tbl(col1 int, col2 int); | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | ||||||
| INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | ||||||
| -- Check bounds for these past functions. | -- Tests for the past functions. | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
| @ -41,13 +41,14 @@ SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal(:'wal_lsn1'); | |||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | -- Failures with start LSNs. | ||||||
|  | SELECT * FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL start LSN must be less than current LSN | ERROR:  WAL start LSN must be less than current LSN | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL start LSN must be less than current LSN | ERROR:  WAL start LSN must be less than current LSN | ||||||
| -- Move to new version 1.1 | -- Move to new version 1.1. | ||||||
| ALTER EXTENSION pg_walinspect UPDATE TO '1.1'; | ALTER EXTENSION pg_walinspect UPDATE TO '1.1'; | ||||||
| -- List what version 1.1 contains | -- List what version 1.1 contains. | ||||||
| \dx+ pg_walinspect | \dx+ pg_walinspect | ||||||
|        Objects in extension "pg_walinspect" |        Objects in extension "pg_walinspect" | ||||||
|                 Object description                 |                 Object description                 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ SELECT 'init' FROM pg_create_physical_replication_slot('regress_pg_walinspect_sl | |||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| CREATE TABLE sample_tbl(col1 int, col2 int); | CREATE TABLE sample_tbl(col1 int, col2 int); | ||||||
| -- Save some LSNs for comparisons | -- Save some LSNs for comparisons. | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | ||||||
| INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn2 \gset | SELECT pg_current_wal_lsn() AS wal_lsn2 \gset | ||||||
| @ -35,56 +35,56 @@ ERROR:  WAL start LSN must be less than end LSN | |||||||
| SELECT * FROM pg_get_wal_block_info(:'wal_lsn2', :'wal_lsn1'); | SELECT * FROM pg_get_wal_block_info(:'wal_lsn2', :'wal_lsn1'); | ||||||
| ERROR:  WAL start LSN must be less than end LSN | ERROR:  WAL start LSN must be less than end LSN | ||||||
| -- LSNs with the highest value possible. | -- LSNs with the highest value possible. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info('FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_record_info('FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL input LSN must be less than current LSN | ERROR:  WAL input LSN must be less than current LSN | ||||||
| -- Success with end LSNs. | -- Success with end LSNs. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| -- failures with start LSNs | -- Failures with start LSNs. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_records_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL start LSN must be less than current LSN | ERROR:  WAL start LSN must be less than current LSN | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_stats('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL start LSN must be less than current LSN | ERROR:  WAL start LSN must be less than current LSN | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_block_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| ERROR:  WAL start LSN must be less than current LSN | ERROR:  WAL start LSN must be less than current LSN | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| -- Tests for all function executions | -- Tests for all function executions | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info(:'wal_lsn1'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_record_info(:'wal_lsn1'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats(:'wal_lsn1', :'wal_lsn2'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', :'wal_lsn2'); | ||||||
|  ok  |  ok  | ||||||
| ---- | ---- | ||||||
|  t |  t | ||||||
| @ -115,7 +115,7 @@ SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2' | |||||||
| -- =================================================================== | -- =================================================================== | ||||||
| -- Tests to get block information from WAL record | -- Tests to get block information from WAL record | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| -- Update table to generate some block data | -- Update table to generate some block data. | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn3 \gset | SELECT pg_current_wal_lsn() AS wal_lsn3 \gset | ||||||
| UPDATE sample_tbl SET col1 = col1 + 1 WHERE col1 = 1; | UPDATE sample_tbl SET col1 = col1 + 1 WHERE col1 = 1; | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn4 \gset | SELECT pg_current_wal_lsn() AS wal_lsn4 \gset | ||||||
| @ -172,7 +172,7 @@ SELECT has_function_privilege('regress_pg_walinspect', | |||||||
|  f |  f | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| -- Functions accessible by users with role pg_read_server_files | -- Functions accessible by users with role pg_read_server_files. | ||||||
| GRANT pg_read_server_files TO regress_pg_walinspect; | GRANT pg_read_server_files TO regress_pg_walinspect; | ||||||
| SELECT has_function_privilege('regress_pg_walinspect', | SELECT has_function_privilege('regress_pg_walinspect', | ||||||
|   'pg_get_wal_record_info(pg_lsn)', 'EXECUTE'); -- yes |   'pg_get_wal_record_info(pg_lsn)', 'EXECUTE'); -- yes | ||||||
| @ -203,7 +203,7 @@ SELECT has_function_privilege('regress_pg_walinspect', | |||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| REVOKE pg_read_server_files FROM regress_pg_walinspect; | REVOKE pg_read_server_files FROM regress_pg_walinspect; | ||||||
| -- Superuser can grant execute to other users | -- Superuser can grant execute to other users. | ||||||
| GRANT EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn) | GRANT EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn) | ||||||
|   TO regress_pg_walinspect; |   TO regress_pg_walinspect; | ||||||
| GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn) | GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn) | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| -- test old extension version entry points | -- Test old extension version entry points. | ||||||
| 
 | 
 | ||||||
| CREATE EXTENSION pg_walinspect WITH VERSION '1.0'; | CREATE EXTENSION pg_walinspect WITH VERSION '1.0'; | ||||||
| 
 | 
 | ||||||
| @ -20,16 +20,17 @@ CREATE TABLE sample_tbl(col1 int, col2 int); | |||||||
| SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | ||||||
| INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | ||||||
| 
 | 
 | ||||||
| -- Check bounds for these past functions. | -- Tests for the past functions. | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1'); | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal(:'wal_lsn1'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal(:'wal_lsn1'); | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | -- Failures with start LSNs. | ||||||
| SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | ||||||
|  | SELECT * FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF'); | ||||||
| 
 | 
 | ||||||
| -- Move to new version 1.1 | -- Move to new version 1.1. | ||||||
| ALTER EXTENSION pg_walinspect UPDATE TO '1.1'; | ALTER EXTENSION pg_walinspect UPDATE TO '1.1'; | ||||||
| 
 | 
 | ||||||
| -- List what version 1.1 contains | -- List what version 1.1 contains. | ||||||
| \dx+ pg_walinspect | \dx+ pg_walinspect | ||||||
| 
 | 
 | ||||||
| SELECT pg_drop_replication_slot('regress_pg_walinspect_slot'); | SELECT pg_drop_replication_slot('regress_pg_walinspect_slot'); | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ SELECT 'init' FROM pg_create_physical_replication_slot('regress_pg_walinspect_sl | |||||||
| 
 | 
 | ||||||
| CREATE TABLE sample_tbl(col1 int, col2 int); | CREATE TABLE sample_tbl(col1 int, col2 int); | ||||||
| 
 | 
 | ||||||
| -- Save some LSNs for comparisons | -- Save some LSNs for comparisons. | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | SELECT pg_current_wal_lsn() AS wal_lsn1 \gset | ||||||
| INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2); | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn2 \gset | SELECT pg_current_wal_lsn() AS wal_lsn2 \gset | ||||||
| @ -32,24 +32,24 @@ SELECT * FROM pg_get_wal_stats(:'wal_lsn2', :'wal_lsn1'); | |||||||
| SELECT * FROM pg_get_wal_block_info(:'wal_lsn2', :'wal_lsn1'); | SELECT * FROM pg_get_wal_block_info(:'wal_lsn2', :'wal_lsn1'); | ||||||
| 
 | 
 | ||||||
| -- LSNs with the highest value possible. | -- LSNs with the highest value possible. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info('FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_record_info('FFFFFFFF/FFFFFFFF'); | ||||||
| -- Success with end LSNs. | -- Success with end LSNs. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF'); | ||||||
| -- failures with start LSNs | -- Failures with start LSNs. | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_records_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_stats('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | SELECT * FROM pg_get_wal_block_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF'); | ||||||
| 
 | 
 | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| -- Tests for all function executions | -- Tests for all function executions | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| 
 | 
 | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info(:'wal_lsn1'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_record_info(:'wal_lsn1'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats(:'wal_lsn1', :'wal_lsn2'); | ||||||
| SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', :'wal_lsn2'); | SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', :'wal_lsn2'); | ||||||
| 
 | 
 | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| -- Test for filtering out WAL records of a particular table | -- Test for filtering out WAL records of a particular table | ||||||
| @ -72,7 +72,7 @@ SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2' | |||||||
| -- Tests to get block information from WAL record | -- Tests to get block information from WAL record | ||||||
| -- =================================================================== | -- =================================================================== | ||||||
| 
 | 
 | ||||||
| -- Update table to generate some block data | -- Update table to generate some block data. | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn3 \gset | SELECT pg_current_wal_lsn() AS wal_lsn3 \gset | ||||||
| UPDATE sample_tbl SET col1 = col1 + 1 WHERE col1 = 1; | UPDATE sample_tbl SET col1 = col1 + 1 WHERE col1 = 1; | ||||||
| SELECT pg_current_wal_lsn() AS wal_lsn4 \gset | SELECT pg_current_wal_lsn() AS wal_lsn4 \gset | ||||||
| @ -103,9 +103,9 @@ SELECT has_function_privilege('regress_pg_walinspect', | |||||||
| SELECT has_function_privilege('regress_pg_walinspect', | SELECT has_function_privilege('regress_pg_walinspect', | ||||||
|   'pg_get_wal_block_info(pg_lsn, pg_lsn) ', 'EXECUTE'); -- no |   'pg_get_wal_block_info(pg_lsn, pg_lsn) ', 'EXECUTE'); -- no | ||||||
| 
 | 
 | ||||||
| -- Functions accessible by users with role pg_read_server_files | -- Functions accessible by users with role pg_read_server_files. | ||||||
| 
 |  | ||||||
| GRANT pg_read_server_files TO regress_pg_walinspect; | GRANT pg_read_server_files TO regress_pg_walinspect; | ||||||
|  | 
 | ||||||
| SELECT has_function_privilege('regress_pg_walinspect', | SELECT has_function_privilege('regress_pg_walinspect', | ||||||
|   'pg_get_wal_record_info(pg_lsn)', 'EXECUTE'); -- yes |   'pg_get_wal_record_info(pg_lsn)', 'EXECUTE'); -- yes | ||||||
| SELECT has_function_privilege('regress_pg_walinspect', | SELECT has_function_privilege('regress_pg_walinspect', | ||||||
| @ -117,7 +117,7 @@ SELECT has_function_privilege('regress_pg_walinspect', | |||||||
| 
 | 
 | ||||||
| REVOKE pg_read_server_files FROM regress_pg_walinspect; | REVOKE pg_read_server_files FROM regress_pg_walinspect; | ||||||
| 
 | 
 | ||||||
| -- Superuser can grant execute to other users | -- Superuser can grant execute to other users. | ||||||
| GRANT EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn) | GRANT EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn) | ||||||
|   TO regress_pg_walinspect; |   TO regress_pg_walinspect; | ||||||
| GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn) | GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user