3 ms·
If you learned SQL before Go, you'd know the pattern works just fine and is arguably a good sanity check. BEGIN; INSERT INTO ... COMMIT; ROLLBA
by randomdata 2y ago
If you learned SQL before Go, you'd know the pattern works just fine and is arguably a good sanity check.
BEGIN;
INSERT INTO ...
COMMIT;
ROLLBACK;
It is not some kind of Go-ism. The Go database/sql package actually executes ROLLBACK in the SQL engine. Check out the error returned by it.
Perhaps you mean learned SQL in the context of languages that consider a failed rollback an exception? In that case one needs to be careful to not rollback, else be stricken to handling the exception, which programmers seem to hate doing.
- owl57 2y ago> The Go database/sql package actually executes ROLLBACK in the SQL engine. No: https://github.com/golang/go/blob/beaf7f3282c2548267d3c894417cc4ecacc5d575/src/database/sql/sql.go#L2319-L2321 https://github.com/golang/go/blob/beaf7f3282c2548267d3c89441...
- randomdata 2y agoFair enough, although it wouldn't matter if it did. Nothing would change other than some unnecessary computation would occur. SQL supports it just fine. Anyone who learned SQL first would know that quite well.
- owl57 2y agoFair as well. It's just sending a command which you know will fail, and even relying on the fact it fails, feels wrong, whether it sends a request over network or not. BTW I checked and it's not an error in Postgres, only a warning. Still not something I would want in my database logs for the happy path.
- randomdata 2y agoYou know it will fail if you didn't screw up anything else. But it's a good sanity check/safety measure to call it anyway incase you made a mistake elsewhere. An errant rollback is more likely to be caught in testing than a dangling transaction.