Skip to content

Instantly share code, notes, and snippets.

View CHERTS's full-sized avatar

Mikhail Grigorev CHERTS

View GitHub Profile
@CHERTS
CHERTS / pg_get_cluster_role.sql
Last active November 8, 2024 10:19
Determine whether the running PostgreSQL cluster is the primary one or not.
SELECT DISTINCT
CASE
WHEN b.sender=0 AND c.receiver=0 THEN
'standalone'
WHEN b.sender>0 AND c.receiver=0 THEN
'primary'
WHEN b.sender=0 AND c.receiver>0 THEN
'replica'
WHEN b.sender>0 AND c.receiver>0 THEN
'primary+replica'
@CHERTS
CHERTS / install_latest_pgscv.sh
Created September 27, 2024 11:07
Install latest pgSCV
wget -qO - $(OS=$(uname -s | tr '[:upper:]' '[:lower:]'); ARCH=$(uname -p | sed 's/x86_64/amd64/g'); wget https://api.github.com/repos/CHERTS/pgscv/releases/latest -qO - | grep -wo "https.*${OS}_${ARCH}.tar.g
z") | tar xzf - -C /tmp && \
mv /tmp/pgscv.yaml /etc 2>/dev/null && \
mv /tmp/pgscv.service /etc/systemd/system 2>/dev/null && \
mv /tmp/pgscv.default /etc/default/pgscv 2>/dev/null && \
mv /tmp/pgscv /usr/sbin 2>/dev/null && \
chown postgres:postgres /etc/pgscv.yaml 2>/dev/null && \
systemctl daemon-reload && \
systemctl enable pgscv --now
@CHERTS
CHERTS / docker-compose.yml
Last active September 25, 2024 09:01
Redpanda + Redpanda console docker-compose file (one node host)
services:
redpanda:
image: docker.redpanda.com/redpandadata/redpanda:v24.2.5
container_name: redpanda
command:
- redpanda
- start
- --kafka-addr internal://0.0.0.0:9092,external://0.0.0.0:19092
# Address the broker advertises to clients that connect to the Kafka API.
# Use the internal addresses to connect to the Redpanda brokers'
@CHERTS
CHERTS / pg_change_owner.sql
Last active October 22, 2024 06:45
How to change owner of PostgreSQL database/schema/table/sequence/views/functions/types?
DO $$
DECLARE
sch RECORD;
tab RECORD;
seq RECORD;
viw RECORD;
mat RECORD;
fun RECORD;
ctype RECORD;
v_schema_exclude text[] := '{pg_catalog,information_schema,monitor,repack}';
@CHERTS
CHERTS / psaux.bash
Created July 29, 2024 13:32
ps aux written entirely in bash without ever forking
#!/bin/bash
# ps aux written entirely in bash without ever forking
# Author: Isabella Bosia
# Github: https://github.com/izabera/ps/tree/develop
#
# so initially i was hoping you could get everything from /proc/<pid>/status
# because it's easy to parse (in most cases) but apparently you can't get
# things like the cpu% :(
@CHERTS
CHERTS / create_publication_and_slot.sql
Created July 25, 2024 13:47
Create logical replication and test
-- Create publication
CREATE PUBLICATION cdc;
-- Create slot
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
-- Create example table
CREATE TABLE replication_test_v1
(
id integer NOT NULL PRIMARY KEY,
@CHERTS
CHERTS / debezium_checking_capture_data.sql
Created July 25, 2024 13:29
Checking capturing data change use logical slot
-- Create slot
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
-- Show publication name
SELECT pubname FROM pg_publication_tables GROUP BY pubname;
-- Peak changes (does not consume changes)
SELECT pg_logical_slot_peek_binary_changes('test_slot_v1', NULL, NULL, 'publication_names', 'dbz_publication', 'proto_version', '1');
-- Get changes (consumes changes)
@CHERTS
CHERTS / partitioned_table.sql
Last active October 18, 2024 08:31
Examples of transfer data to partitioned table in PostgreSQL
CREATE TABLE IF NOT EXISTS orders_with_partitions (
id uuid not null,
processed_at timestamp with time zone not null,
created_at timestamp with time zone not null default CURRENT_TIMESTAMP,
data jsonb not null
) PARTITION BY RANGE (created_at);
CREATE INDEX IF NOT EXISTS orders_with_partitions_created_at_idx
ON orders_with_partitions (created_at);
@CHERTS
CHERTS / product_and_order.sql
Created July 10, 2024 06:15
Product and orders examples database using PostgreSQL
CREATE TYPE products_unit AS ENUM ('Килограмм', 'Грамм', 'Литр', 'Метр', 'Пара', 'Штука');
CREATE TABLE IF NOT EXISTS products (
product_no bigint PRIMARY KEY,
price numeric,
unit products_unit,
active bool,
name text
);
@CHERTS
CHERTS / debezium_heartbeat_table.sql
Last active June 20, 2024 12:10
Create Debezium heartbeat table in PostgreSQL
CREATE SCHEMA debezium;
CREATE TABLE debezium.debezium_signal(id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL);
CREATE TABLE debezium.pg_heartbeat(id SERIAL, last_update TIMESTAMP DEFAULT current_timestamp, PRIMARY KEY (id));
--INSERT INTO debezium.pg_heartbeat(id) VALUES (0);
GRANT USAGE ON SCHEMA debezium TO debezium_dwh;
GRANT SELECT, INSERT, UPDATE, DELETE ON debezium.debezium_signal TO debezium_dwh;
GRANT SELECT, INSERT, UPDATE, DELETE ON debezium.pg_heartbeat TO debezium_dwh;
ALTER PUBLICATION dbz_publication ADD TABLE debezium.debezium_signal;
ALTER PUBLICATION dbz_publication ADD TABLE debezium.pg_heartbeat;
ALTER TABLE debezium.debezium_signal REPLICA IDENTITY FULL;