add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
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 houses (
id serial PRIMARY KEY
, name varchar(80)
, created_at timestamp DEFAULT now()
);

CREATE TABLE transitions1 (
id serial PRIMARY KEY
, house_id integer
, user_id integer
, created_at timestamp DEFAULT now()
, FOREIGN KEY(house_id) REFERENCES houses (id) ON DELETE CASCADE
);

CREATE OR REPLACE FUNCTION add_transition1()
RETURNS trigger AS
$func$
DECLARE
_user_id text := current_setting('myvars.user_id', true); -- text!
BEGIN
IF _user_id ~ '^\d+$' THEN -- one or more digits?
-- all good, do nothing
ELSE
RAISE WARNING 'Invalid user_id % for house_id % was reset to NULL!', _user_id, NEW.id; -- optional
_user_id := NULL; -- or do something else?
END IF;

INSERT INTO transitions1 (user_id, house_id)
VALUES (_user_id::int, NEW.id); -- cast is safe now

RETURN NULL; -- OK for AFTER trigger
END
$func$ LANGUAGE plpgsql;

CREATE TRIGGER add_transition1
AFTER INSERT OR UPDATE ON houses
CREATE TABLE
CREATE TABLE
CREATE FUNCTION
CREATE TRIGGER
-- case 1: option not set yet
INSERT INTO houses (name)
VALUES ('HOUSE PARTY 1')
RETURNING houses.id;
id
1
INSERT 0 1
-- case 2: option set to valid int
BEGIN;
SELECT set_config('myvars.user_id', '55', true); -- SET LOCAL

INSERT INTO houses (name)
VALUES ('HOUSE PARTY 2')
RETURNING houses.id;
COMMIT;
BEGIN
set_config
55
SELECT 1
id
2
INSERT 0 1
COMMIT
-- case 3: option set to invalid int
BEGIN;
SELECT set_config('myvars.user_id', '5x5', true); -- SET LOCAL

INSERT INTO houses (name)
VALUES ('HOUSE PARTY 3')
RETURNING houses.id;
COMMIT;
BEGIN
set_config
5x5
SELECT 1
id
3
INSERT 0 1
COMMIT
-- case 4: option reset (empty string)
INSERT INTO houses (name)
VALUES ('HOUSE PARTY 4')
RETURNING houses.id;
id
4
INSERT 0 1
TABLE houses;
TABLE transitions1;
id name created_at
1 HOUSE PARTY 1 2024-10-21 09:11:35.192071
2 HOUSE PARTY 2 2024-10-21 09:11:35.202044
3 HOUSE PARTY 3 2024-10-21 09:11:35.204451
4 HOUSE PARTY 4 2024-10-21 09:11:35.206354
SELECT 4
id house_id user_id created_at
1 1 null 2024-10-21 09:11:35.192071
2 2 55 2024-10-21 09:11:35.202044
3 3 null 2024-10-21 09:11:35.204451
4 4 null 2024-10-21 09:11:35.206354
SELECT 4