mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 00:01:26 -04:00
* [PG-938] - Add automated bash script to verify pg_tde backup/restore functionality using pg_basebackup * [PG-1367] Create separate script for server and tde configuration
75 lines
2.1 KiB
PL/PgSQL
75 lines
2.1 KiB
PL/PgSQL
-- Creating encrypted tables
|
|
CREATE TABLE tde_table (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT
|
|
) USING tde_heap;
|
|
|
|
CREATE TABLE tde_child (
|
|
id SERIAL PRIMARY KEY,
|
|
parent_id INT REFERENCES tde_table(id)
|
|
) USING tde_heap;
|
|
|
|
-- Inserting test data
|
|
INSERT INTO tde_table (name) VALUES ('Alice'), ('Bob');
|
|
INSERT INTO tde_child (parent_id) VALUES (1);
|
|
|
|
-- Creating index on encrypted table
|
|
CREATE INDEX idx_tde_name ON tde_table(name);
|
|
SELECT tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename;
|
|
|
|
-- Adding constraints
|
|
ALTER TABLE tde_table ADD CONSTRAINT unique_name UNIQUE(name);
|
|
ALTER TABLE tde_table ADD CONSTRAINT check_name_length CHECK (LENGTH(name) > 3);
|
|
|
|
SELECT conname, conrelid::regclass, contype FROM pg_constraint WHERE connamespace = 'public'::regnamespace ORDER BY conrelid;
|
|
|
|
-- Creating test function
|
|
CREATE FUNCTION get_tde_data() RETURNS TABLE(id INT, name TEXT) AS $$
|
|
SELECT * FROM tde_table;
|
|
$$ LANGUAGE SQL;
|
|
|
|
-- Running function
|
|
SELECT * FROM get_tde_data();
|
|
|
|
-- Creating partitioned table
|
|
CREATE TABLE part_table (
|
|
id INT,
|
|
data TEXT
|
|
) PARTITION BY RANGE (id);
|
|
|
|
-- Creating partitions using TDE
|
|
CREATE TABLE part1 PARTITION OF part_table
|
|
FOR VALUES FROM (1) TO (100) USING tde_heap;
|
|
|
|
-- Insert test data
|
|
INSERT INTO part_table VALUES (10, 'Partitioned Data');
|
|
|
|
-- Querying data
|
|
SELECT inhrelid::regclass, inhparent::regclass FROM pg_inherits ORDER BY inhparent;
|
|
|
|
-- Creating audit log table
|
|
CREATE TABLE audit_log (
|
|
id SERIAL PRIMARY KEY,
|
|
table_name TEXT,
|
|
operation TEXT
|
|
) USING tde_heap;
|
|
|
|
-- Creating trigger function
|
|
CREATE FUNCTION audit_tde_changes() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
INSERT INTO audit_log (table_name, operation)
|
|
VALUES (TG_TABLE_NAME, TG_OP);
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Creating trigger
|
|
CREATE TRIGGER tde_audit
|
|
AFTER INSERT OR UPDATE OR DELETE ON tde_table
|
|
FOR EACH ROW EXECUTE FUNCTION audit_tde_changes();
|
|
|
|
SELECT tgname, relname FROM pg_trigger JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid WHERE NOT tgisinternal ORDER BY relname;
|
|
|
|
-- Check WAL logs for plaintext leaks
|
|
-- SELECT * FROM pg_walfile_name_offset(pg_current_wal_lsn());
|