Transactions and Error Handling in PostgreSQL
Jason Myers
Principal Engineer
INSERT INTO sales (name, quantity, cost)
VALUES
('chocolate chip', 6, null);
ERROR: null value in column "cost" violates not-null constraint
DETAIL: Failing row contains
(1, "chocolate chip", 6, null, 2020-04-28 19:58:55.715886).
R
tryCatch(
sqrt("a"),
error=function(e)
print("Boom!")
)
Python
try:
math.sqrt("a")
except Exception as e:
print("Boom!")
PL/pgSQL
BEGIN
SELECT
SQRT("a");
EXCEPTION WHEN others THEN RAISE INFO 'Boom!';
END;
Results
R: Boom!
Python: Boom!
SQL: INFO: Boom!
DO $$
DECLARE some_variable text;
BEGIN SELECT text from a table; END;
$$ language 'plpgsql';
DO $$
BEGIN
SELECT SQRT("a");
EXCEPTION
WHEN others THEN
INSERT INTO errors (msg) VALUES ('Can not take the square root of a string.');
RAISE INFO 'Can not take the square root of a string.';
END;
$$ language 'plpgsql';
column | type |
---|---|
patient_id | integer |
a1c | double (float) |
glucose | integer |
fasting | boolean |
created_on | timestamp |
column | type |
---|---|
error_id | integer |
state | string |
msg | string |
detail | string |
context | string |
Transactions and Error Handling in PostgreSQL