PostgreSQL 15 sürümüyle birlikte tablolarda kolon ve satır bazlı filtreleme yaparak logical replication uygulanabilir hale geldi. Bu sayede tablolardaki istenilen kolonlar ve satırlarda replikasyon yapılabilmektedir. PostgreSQL 15 ile gelen önemli yeni özelliklere PostgreSQL 15 yazımızdan ulaşabilirsiniz.
Logical Replication
wal_level=logical
Logical replication için postgresql.conf dosyasında wal_level parametresinin logical olarak düzenlenmesi gerekir. Varsayılan olarak wal_level değeri replica olarak gelmektedir. replica değeri streaming replication için gerekli wal dosyalarının oluşmasını sağlar. wal_level parametresi logical olarak ayarlandığında ise replica değeri ile sağlanan wal bilgisine logical replication için de gerekli olan wal bilgilerinin eklenmesini sağlar. Yani wal_level parametresinin logical olarak ayarladığınızda replica değerini de kapsamaktadır ve streaming replication çalışmaya devam edebilmektedir. wal_level logical olarak çalıştığında wal dosyalarının boyutu büyümektedir. Parametre düzenlemesi her iki veri tabanında yapılır.
Örnek Veri Tabanı ve Tablolar
postgres=# CREATE DATABASE testdb;
CREATE DATABASE
postgres=# \c testdb
You are now connected to database “testdb” as user “postgres”.
testdb=# CREATE TABLE person(person_id int, name text, surname text, gender text, PRIMARY KEY(person_id));
CREATE TABLE
testdb=# INSERT INTO person values (1,’Fatih’,’Acar’,’Erkek’);
INSERT 0 1
testdb=# INSERT INTO person values (2,’Ayşe’,’Fatma’,’Kadın’);
INSERT 0 1
testdb=# INSERT INTO person values (3,’Ahmet’,’Mehmet’,’Erkek’);
INSERT 0 1
testdb=# select * from person;
person_id | name | surname | gender
———–+——-+———+——–
1 | Fatih | Acar | Erkek
2 | Ayşe | Fatma | Kadın
3 | Ahmet | Mehmet | Erkek
(3 rows)
Publication Oluşturma
Logical replication uygulanacak tablo ya da tabloların istenilen alanları da belirlenerek publication oluşturulur.
postgres=# CREATE PUBLICATION pub_person FOR TABLE person (person_id, name, surname);
CREATE PUBLICATION
Publication yapılan tabloda satır bazlı filtre eklemek için aşağıdaki gibi sorguya where şartı ekleyebilirsiniz.
CREATE PUBLICATION pub_person FOR TABLE person (person_id, name, surname) where (gender=’Erkek’);
Eğer tüm tabloları publication kapsamına almak isterseniz aşağıdaki sorguyu kullanabilirsiniz.
CREATE PUBLICATION pub_tablolar FOR ALL TABLES;
Belirli tabloları tüm alanlarıyla publication kapsamına almak isterseniz aşağıdaki sorguyu kullanabilirsiniz.
CREATE PUBLICATION pub_tablo123 FOR TABLE tablo1,tablo2,tablo3;
Replikasyon Kullanıcısı
Replikasyon için özel oluşturulmuş ve replikasyon uygulanacak tablolara yetkisi olan kullanıcıya ihtiyaç vardır. Örnek olarak repuser kullanıcısı aşağıdaki gibi oluşturulabilir.
[postgres@btcozumleri ~]$ createuser -p 5432 repuser -P –replication
postgres=# GRANT ALL ON person TO repuser;
GRANT
Subscription Oluşturma
Standby veri tabanında master veritabanındaki publication’da belirlenen kolonlar ile aynı olacak şekilde tablo oluşturulur.
postgres=# CREATE DATABASE testdb;
CREATE DATABASE
postgres=# \c testdb;
You are now connected to database “testdb” as user “postgres”.
testdb=# CREATE TABLE person(person_id int, name text, surname text, PRIMARY KEY(person_id));
CREATE TABLE
testdb=# CREATE SUBSCRIPTION sub_person CONNECTION ‘host=localhost dbname=testdb user=repuser password=123456 application_name=sub_person’ PUBLICATION pub_person;
NOTICE: created replication slot “sub_person” on publisher
CREATE SUBSCRIPTION
postgres=# \c testdb
You are now connected to database “testdb” as user “postgres”.
testdb=# select * from person;
person_id | name | surname
———–+——-+———
1 | Fatih | Acar
2 | Ayşe | Fatma
3 | Ahmet | Mehmet
(3 rows)
Standby veri tabanına veriler geldi. Master veri tabanından veri ekleme çıkarma işlemleri yaparak test işlemleri yapabilirsiniz.
select * from pg_replication_slots; ile master tarafta açık olan replication slotları listeyebilirsiniz.
Bir yorum yaz