{"id":12215,"date":"2019-01-27T10:50:30","date_gmt":"2019-01-27T09:50:30","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/"},"modified":"2023-06-15T16:33:25","modified_gmt":"2023-06-15T14:33:25","slug":"postgresql-when-wal_level-to-logical","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/","title":{"rendered":"PostgreSQL: When wal_level to logical"},"content":{"rendered":"<p><strong>By Mouhamadou Diaw<\/strong><\/p>\n<p>wal_level determines the quantity of information written to the WAL. With PostgreSQL 11 the parameter wal_level can have 3 values:<br \/>\n-minimal : only information needed to recover from a crash or an immediate shutdown<br \/>\n-replica : enough data to support WAL archiving and replication<br \/>\n-logical : enough information to support <strong>logical decoding<\/strong>.<\/p>\n<p>If we want to use logical decoding, wal_level should be set to logical. Logical decoding is the process of extracting all persistent changes to a database&#8217;s tables into a coherent, easy to understand format which can be interpreted without detailed knowledge of the database&#8217;s internal state.<br \/>\nIn PostgreSQL, logical decoding is implemented by decoding the contents of the write-ahead log, which describe changes on a storage level, into an application-specific form such as a stream of tuples or SQL statements.<\/p>\n<p>In this blog we are going to see some easy examples which will allow us to better understand this concept.<\/p>\n<p>Before we can use logical decoding the parameter wal_level should be set to logical. As we will create replications slots, the parameter max_replication_slots should also be at least 1.<br \/>\nBelow our values for these parameters<\/p>\n<div>\n<div id=\"highlighter_752665\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# show max_replication_slots ;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">max_replication_slots<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-----------------------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">10<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">postgres=# show wal_level ;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">wal_level<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql comments\">-----------<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">logical<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>First let\u2019s create a slot. For this we will use the function pg_create_logical_replication_slot()<\/p>\n<div>\n<div id=\"highlighter_791490\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_create_logical_replication_slot(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql string\">'test_decoding'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">slot_name |\u00a0\u00a0\u00a0 lsn<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-----------+-----------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">my_slot\u00a0\u00a0 | 0\/702B658<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>To inspect the changes at WAL level we can use the function pg_logical_slot_get_changes(). So let\u2019s call this function<\/p>\n<div>\n<div id=\"highlighter_647581\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_logical_slot_get_changes(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">lsn | xid | data<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-----+-----+------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">(0 <\/code><code class=\"sql keyword\">rows<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This above output is expected because there is no change yet in our database<br \/>\nNow let\u2019s do some insert in the database and let\u2019s call again the function pg_logical_slot_get_changes()<\/p>\n<div>\n<div id=\"highlighter_387255\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">begin<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">values<\/code> <code class=\"sql plain\">(1,<\/code><code class=\"sql string\">'t1'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 1<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">values<\/code> <code class=\"sql plain\">(2,<\/code><code class=\"sql string\">'t2'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 1<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">commit<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql keyword\">COMMIT<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_logical_slot_get_changes(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">lsn\u00a0\u00a0\u00a0 | xid |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql comments\">-----------+-----+------------------------------------------------------------------------<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F538 | 582 | <\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">582<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F538 | 582 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:1 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t1'<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F5B0 | 582 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:2 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t2'<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F620 | 582 | <\/code><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">582<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql plain\">(4 <\/code><code class=\"sql keyword\">rows<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>As expected we can see changes that were made.<br \/>\nNow what happen if we call again the same function?<\/p>\n<div>\n<div id=\"highlighter_119827\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_logical_slot_get_changes(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">lsn | xid | data<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-----+-----+------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">(0 <\/code><code class=\"sql keyword\">rows<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The changes are no longer reported. It\u2019s normal because with the function pg_logical_slot_get_changes(), changes are consumed (will not be returned again). If we want the changes not to be consumed we can use the function pg_logical_slot_peek_changes(). This function behaves like the first one, except that changes are not consumed; that is, they will be returned again on future calls.<\/p>\n<div>\n<div id=\"highlighter_65400\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">begin<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">values<\/code> <code class=\"sql plain\">(3,<\/code><code class=\"sql string\">'t3'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 1<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">values<\/code> <code class=\"sql plain\">(4,<\/code><code class=\"sql string\">'t4'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 1<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">commit<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql keyword\">COMMIT<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">delete<\/code> <code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">where<\/code> <code class=\"sql plain\">id=1;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql keyword\">DELETE<\/code> <code class=\"sql plain\">1<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_logical_slot_peek_changes(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">lsn\u00a0\u00a0\u00a0 | xid |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql comments\">-----------+-----+------------------------------------------------------------------------<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F738 | 583 | <\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">583<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F738 | 583 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:3 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t3'<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F838 | 583 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:4 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t4'<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8A8 | 583 | <\/code><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">583<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8E0 | 584 | <\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">584<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8E0 | 584 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">DELETE<\/code><code class=\"sql plain\">: (<\/code><code class=\"sql keyword\">no<\/code><code class=\"sql plain\">-tuple-data)<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F948 | 584 | <\/code><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">584<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql plain\">(7 <\/code><code class=\"sql keyword\">rows<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">* <\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">pg_logical_slot_peek_changes(<\/code><code class=\"sql string\">'my_slot'<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">, <\/code><code class=\"sql color1\">NULL<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">lsn\u00a0\u00a0\u00a0 | xid |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"sql comments\">-----------+-----+------------------------------------------------------------------------<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F738 | 583 | <\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">583<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F738 | 583 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:3 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t3'<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F838 | 583 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:4 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t4'<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8A8 | 583 | <\/code><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">583<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8E0 | 584 | <\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">584<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F8E0 | 584 | <\/code><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">DELETE<\/code><code class=\"sql plain\">: (<\/code><code class=\"sql keyword\">no<\/code><code class=\"sql plain\">-tuple-data)<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">0\/703F948 | 584 | <\/code><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">584<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"sql plain\">(7 <\/code><code class=\"sql keyword\">rows<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Logical decoding can also be managed using pg_recvlogical included in the PostgreSQL distribution.<br \/>\nLet\u2019s create a slot using pg_recvlogical<\/p>\n<div>\n<div id=\"highlighter_948179\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[postgres@dbi-pg-essentials_3 PG1]$ pg_recvlogical -d postgres <\/code><code class=\"sql comments\">--slot=myslot_2\u00a0 --create-slot<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And let\u2019s start the streaming in a first terminal<\/p>\n<div>\n<div id=\"highlighter_801464\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[postgres@dbi-pg-essentials_3 PG1]$ pg_recvlogical -d postgres <\/code><code class=\"sql comments\">--slot=myslot_2\u00a0 --start -f -<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>If we do an insert in the database from a second terminal<\/p>\n<div>\n<div id=\"highlighter_383091\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">postgres=# <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">mytab <\/code><code class=\"sql keyword\">values<\/code> <code class=\"sql plain\">(9,<\/code><code class=\"sql string\">'t9'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 1<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">postgres=#<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We will see following in the first terminal<\/p>\n<div>\n<div id=\"highlighter_316280\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[postgres@dbi-pg-essentials_3 PG1]$ pg_recvlogical -d postgres <\/code><code class=\"sql comments\">--slot=myslot_2\u00a0 --start -f -\u00a0\u00a0 <\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql plain\">587<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">table<\/code> <code class=\"sql keyword\">public<\/code><code class=\"sql plain\">.mytab: <\/code><code class=\"sql keyword\">INSERT<\/code><code class=\"sql plain\">: id[<\/code><code class=\"sql keyword\">integer<\/code><code class=\"sql plain\">]:9 <\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">[<\/code><code class=\"sql keyword\">character<\/code> <code class=\"sql keyword\">varying<\/code><code class=\"sql plain\">]:<\/code><code class=\"sql string\">'t9'<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql plain\">587<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>Conclusion<\/h3>\n<p>In this blog we have seen that if we want to do logical decoding, we have to set the parameter wal_level to logical. Be aware that setting wal_level to logical can increase the volume of generated WAL. If we just want replication or archiving WALs, the value replica is enough with PostgreSQL.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Mouhamadou Diaw wal_level determines the quantity of information written to the WAL. With PostgreSQL 11 the parameter wal_level can have 3 values: -minimal : only information needed to recover from a crash or an immediate shutdown -replica : enough data to support WAL archiving and replication -logical : enough information to support logical decoding. [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,83],"tags":[1555,77,1556,1557],"type_dbi":[],"class_list":["post-12215","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-postgresql","tag-logical-decoding","tag-postgresql","tag-replication-slot","tag-wal_level"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PostgreSQL: When wal_level to logical - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgreSQL , wal_level, logical decoding,replication slot\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL: When wal_level to logical\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL , wal_level, logical decoding,replication slot\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-27T09:50:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-15T14:33:25+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"PostgreSQL: When wal_level to logical\",\"datePublished\":\"2019-01-27T09:50:30+00:00\",\"dateModified\":\"2023-06-15T14:33:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\"},\"wordCount\":468,\"commentCount\":0,\"keywords\":[\"logical decoding\",\"PostgreSQL\",\"replication slot\",\"wal_level\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\",\"name\":\"PostgreSQL: When wal_level to logical - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2019-01-27T09:50:30+00:00\",\"dateModified\":\"2023-06-15T14:33:25+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"PostgreSQL , wal_level, logical decoding,replication slot\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL: When wal_level to logical\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL: When wal_level to logical - dbi Blog","description":"PostgreSQL , wal_level, logical decoding,replication slot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL: When wal_level to logical","og_description":"PostgreSQL , wal_level, logical decoding,replication slot","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/","og_site_name":"dbi Blog","article_published_time":"2019-01-27T09:50:30+00:00","article_modified_time":"2023-06-15T14:33:25+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"PostgreSQL: When wal_level to logical","datePublished":"2019-01-27T09:50:30+00:00","dateModified":"2023-06-15T14:33:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/"},"wordCount":468,"commentCount":0,"keywords":["logical decoding","PostgreSQL","replication slot","wal_level"],"articleSection":["Database Administration &amp; Monitoring","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/","name":"PostgreSQL: When wal_level to logical - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2019-01-27T09:50:30+00:00","dateModified":"2023-06-15T14:33:25+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"PostgreSQL , wal_level, logical decoding,replication slot","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-when-wal_level-to-logical\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL: When wal_level to logical"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=12215"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12215\/revisions"}],"predecessor-version":[{"id":25938,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12215\/revisions\/25938"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=12215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=12215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=12215"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=12215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}