#!/bin/bash

unset PGHOST
unset PGPORT
unset PGUSER
export PGDATABASE=postgres
export BASEDIR=/opt/postgresql/datas

export PGDATA=$(mktemp -dp $BASEDIR)
export LOGFILE=$(mktemp -p $BASEDIR)

echo "############################################################"
echo "# Starting test case #######################################"
echo "############################################################"
echo "##### postgres release is" $(postgres --version)
echo "##### PGDATA is $PGDATA"
echo "##### LOGFILE is $LOGFILE"

echo "############################################################"
echo "# Initializing new cluster #################################"
echo "############################################################"
initdb

echo "############################################################"
echo "# Configuring new cluster ##################################"
echo "############################################################"
echo "$PGDATA/postgresql.conf"
cat >> $PGDATA/postgresql.conf <<_EOF_
cluster_name = 'testcase'
wal_level = logical
log_min_duration_statement = 0
log_replication_commands = on
log_lock_waits = on
_EOF_

echo "############################################################"
echo "# Starting new cluster #####################################"
echo "############################################################"
pg_ctl -l "$LOGFILE" start

test -f "$PGDATA/postmaster.pid" || exit 1

echo "############################################################"
echo "# Creating databases and role ##############################"
echo "############################################################"
createdb db01
createdb db02
createuser --superuser --replication repuser

echo "############################################################"
echo "# Executing SQL script #####################################"
echo "############################################################"
psql <<_EOF_
\c db01

CREATE SCHEMA s01;

CREATE TABLE s01.foo (
  id SERIAL PRIMARY KEY,
  code VARCHAR(10) NOT NULL,
  txt1 TEXT,
  txt2 TEXT NOT NULL,
  col VARCHAR(4) NOT NULL
);

CREATE TABLE s01.bar (
  id SERIAL PRIMARY KEY,
  code VARCHAR(10) NOT NULL,
  txt1 TEXT,
  txt2 TEXT NOT NULL,
  col VARCHAR(4) NOT NULL
);

INSERT INTO s01.foo
    (code, txt1, txt2, col)
SELECT
    left(md5(i::text), 10),
    md5(random()::text),
    md5(random()::text),
    left(md5(random()::text), 4)
FROM generate_series(1, 20000000) s(i);

INSERT INTO s01.bar
    (code, txt1, txt2, col)
SELECT
    left(md5(i::text), 10),
    md5(random()::text),
    md5(random()::text),
    left(md5(random()::text), 4)
FROM generate_series(1, 20000000) s(i);

CREATE PUBLICATION pub FOR ALL TABLES;

SELECT pg_create_logical_replication_slot('sub', 'pgoutput');

\c db02

CREATE SCHEMA s01;

CREATE TABLE s01.foo (
  id SERIAL PRIMARY KEY,
  code VARCHAR(10) NOT NULL,
  txt1 TEXT,
  txt2 TEXT NOT NULL,
  col VARCHAR(4) NOT NULL
);

CREATE TABLE s01.bar (
  id SERIAL PRIMARY KEY,
  code VARCHAR(10) NOT NULL,
  txt1 TEXT,
  txt2 TEXT NOT NULL,
  col VARCHAR(4) NOT NULL
);

CREATE SUBSCRIPTION sub
  CONNECTION 'dbname=db01 host=localhost port=5432 user=repuser'
  PUBLICATION pub
  WITH (create_slot=false);
_EOF_

sleep 10

ps -ef | grep postgres

tail -f "$LOGFILE"
