mirror of
https://github.com/postgres/postgres.git
synced 2026-01-05 23:38:41 +03:00
pg_input_error_info() is now a SQL function able to return a row with more than just the error message generated for incorrect data type inputs when these are able to handle soft failures, returning more contents of ErrorData, as of: - The error message (same as before). - The error detail, if set. - The error hint, if set. - SQL error code. All the regression tests that relied on pg_input_error_message() are updated to reflect the effects of the rename. Per discussion with Tom Lane and Andrew Dunstan. Author: Nathan Bossart Discussion: https://postgr.es/m/139a68e1-bd1f-a9a7-b5fe-0be9845c6311@dunslane.net
61 lines
1.9 KiB
SQL
61 lines
1.9 KiB
SQL
--
|
|
-- PG_LSN
|
|
--
|
|
|
|
CREATE TABLE PG_LSN_TBL (f1 pg_lsn);
|
|
|
|
-- Largest and smallest input
|
|
INSERT INTO PG_LSN_TBL VALUES ('0/0');
|
|
INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
|
|
|
|
-- Incorrect input
|
|
INSERT INTO PG_LSN_TBL VALUES ('G/0');
|
|
INSERT INTO PG_LSN_TBL VALUES ('-1/0');
|
|
INSERT INTO PG_LSN_TBL VALUES (' 0/12345678');
|
|
INSERT INTO PG_LSN_TBL VALUES ('ABCD/');
|
|
INSERT INTO PG_LSN_TBL VALUES ('/ABCD');
|
|
|
|
-- Also try it with non-error-throwing API
|
|
SELECT pg_input_is_valid('16AE7F7', 'pg_lsn');
|
|
SELECT * FROM pg_input_error_info('16AE7F7', 'pg_lsn');
|
|
|
|
-- Min/Max aggregation
|
|
SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
|
|
|
|
DROP TABLE PG_LSN_TBL;
|
|
|
|
-- Operators
|
|
SELECT '0/16AE7F8' = '0/16AE7F8'::pg_lsn;
|
|
SELECT '0/16AE7F8'::pg_lsn != '0/16AE7F7';
|
|
SELECT '0/16AE7F7' < '0/16AE7F8'::pg_lsn;
|
|
SELECT '0/16AE7F8' > pg_lsn '0/16AE7F7';
|
|
SELECT '0/16AE7F7'::pg_lsn - '0/16AE7F8'::pg_lsn;
|
|
SELECT '0/16AE7F8'::pg_lsn - '0/16AE7F7'::pg_lsn;
|
|
SELECT '0/16AE7F7'::pg_lsn + 16::numeric;
|
|
SELECT 16::numeric + '0/16AE7F7'::pg_lsn;
|
|
SELECT '0/16AE7F7'::pg_lsn - 16::numeric;
|
|
SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
|
|
SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 2::numeric; -- out of range error
|
|
SELECT '0/1'::pg_lsn - 1::numeric;
|
|
SELECT '0/1'::pg_lsn - 2::numeric; -- out of range error
|
|
SELECT '0/0'::pg_lsn + ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
|
|
SELECT 'FFFFFFFF/FFFFFFFF'::pg_lsn - ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
|
|
SELECT '0/16AE7F7'::pg_lsn + 'NaN'::numeric;
|
|
SELECT '0/16AE7F7'::pg_lsn - 'NaN'::numeric;
|
|
|
|
-- Check btree and hash opclasses
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT DISTINCT (i || '/' || j)::pg_lsn f
|
|
FROM generate_series(1, 10) i,
|
|
generate_series(1, 10) j,
|
|
generate_series(1, 5) k
|
|
WHERE i <= 10 AND j > 0 AND j <= 10
|
|
ORDER BY f;
|
|
|
|
SELECT DISTINCT (i || '/' || j)::pg_lsn f
|
|
FROM generate_series(1, 10) i,
|
|
generate_series(1, 10) j,
|
|
generate_series(1, 5) k
|
|
WHERE i <= 10 AND j > 0 AND j <= 10
|
|
ORDER BY f;
|