By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE parent (
id TEXT PRIMARY KEY,
name TEXT,
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
);
INSERT INTO parent (id, name) VALUES (1, 'name 1'), (2, 'name 2');
CREATE TABLE
INSERT 0 2
CREATE TABLE child_n (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
parent_id TEXT NOT NULL REFERENCES parent (id) ON DELETE CASCADE
);
INSERT INTO child_n (id, parent_id) VALUES (1,1), (2,2), (3,1), (4,2);
CREATE TABLE
INSERT 0 4
SELECT * FROM parent;
SELECT * FROM child_n;
id | name | created_at | updated_at |
---|---|---|---|
1 | name 1 | 2023-12-18 12:43:14.303489+00 | 2023-12-18 12:43:14.303489+00 |
2 | name 2 | 2023-12-18 12:43:14.303489+00 | 2023-12-18 12:43:14.303489+00 |
SELECT 2
id | parent_id |
---|---|
1 | 1 |
2 | 2 |
3 | 1 |
4 | 2 |
SELECT 4
WITH cte AS ( DELETE
FROM parent
WHERE id = '1'
RETURNING * )
INSERT INTO parent
SELECT *
FROM cte;
INSERT 0 1
SELECT * FROM parent;
SELECT * FROM child_n;
id | name | created_at | updated_at |
---|---|---|---|
2 | name 2 | 2023-12-18 12:43:14.303489+00 | 2023-12-18 12:43:14.303489+00 |
1 | name 1 | 2023-12-18 12:43:14.303489+00 | 2023-12-18 12:43:14.303489+00 |
SELECT 2
id | parent_id |
---|---|
2 | 2 |
4 | 2 |
SELECT 2