|
22 | 22 | $node->append_conf('postgresql.conf', 'wal_keep_size=1GB');
|
23 | 23 | $node->start;
|
24 | 24 |
|
25 |
| -$node->safe_psql('postgres', 'create table filler (a int)'); |
26 |
| -# First, measure how many bytes does the insertion of 1000 rows produce |
27 |
| -my $start_lsn = |
28 |
| - $node->safe_psql('postgres', q{select pg_current_wal_insert_lsn() - '0/0'}); |
29 |
| -$node->safe_psql('postgres', |
30 |
| - 'insert into filler select * from generate_series(1, 1000)'); |
31 |
| -my $end_lsn = |
32 |
| - $node->safe_psql('postgres', q{select pg_current_wal_insert_lsn() - '0/0'}); |
33 |
| -my $rows_walsize = $end_lsn - $start_lsn; |
| 25 | +$node->safe_psql('postgres', 'create table filler (a int, b text)'); |
34 | 26 |
|
35 | 27 | # Now consume all remaining room in the current WAL segment, leaving
|
36 | 28 | # space enough only for the start of a largish record.
|
37 | 29 | $node->safe_psql(
|
38 |
| - 'postgres', qq{ |
39 |
| -WITH setting AS ( |
40 |
| - SELECT setting::int AS wal_segsize |
41 |
| - FROM pg_settings WHERE name = 'wal_segment_size' |
42 |
| -) |
43 |
| -INSERT INTO filler |
44 |
| -SELECT g FROM setting, |
45 |
| - generate_series(1, 1000 * (wal_segsize - ((pg_current_wal_insert_lsn() - '0/0') % wal_segsize)) / $rows_walsize) g |
| 30 | + 'postgres', q{ |
| 31 | +DO $$ |
| 32 | +DECLARE |
| 33 | + wal_segsize int := setting::int FROM pg_settings WHERE name = 'wal_segment_size'; |
| 34 | + remain int; |
| 35 | + iters int := 0; |
| 36 | +BEGIN |
| 37 | + LOOP |
| 38 | + INSERT into filler |
| 39 | + select g, repeat(md5(g::text), (random() * 60 + 1)::int) |
| 40 | + from generate_series(1, 10) g; |
| 41 | +
|
| 42 | + remain := wal_segsize - (pg_current_wal_insert_lsn() - '0/0') % wal_segsize; |
| 43 | + IF remain < 2 * setting::int from pg_settings where name = 'block_size' THEN |
| 44 | + RAISE log 'exiting after % iterations, % bytes to end of WAL segment', iters, remain; |
| 45 | + EXIT; |
| 46 | + END IF; |
| 47 | + iters := iters + 1; |
| 48 | + END LOOP; |
| 49 | +END |
| 50 | +$$; |
46 | 51 | });
|
47 | 52 |
|
48 | 53 | my $initfile = $node->safe_psql('postgres',
|
|
0 commit comments