-- regression test for the uuid datatype -- creating test tables CREATETABLE guid1
(
guid_field UUID,
text_field TEXT DEFAULT(now())
); CREATETABLE guid2
(
guid_field UUID,
text_field TEXT DEFAULT(now())
); CREATETABLE guid3
(
id SERIAL,
guid_field UUID
);
-- inserting invalid data tests -- too long INSERTINTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111F'); -- too short INSERTINTO guid1(guid_field) VALUES('{11111111-1111-1111-1111-11111111111}'); -- valid data but invalid format INSERTINTO guid1(guid_field) VALUES('111-11111-1111-1111-1111-111111111111'); INSERTINTO guid1(guid_field) VALUES('{22222222-2222-2222-2222-222222222222 '); -- invalid data INSERTINTO guid1(guid_field) VALUES('11111111-1111-1111-G111-111111111111'); INSERTINTO guid1(guid_field) VALUES('11+11111-1111-1111-1111-111111111111');
-- test non-error-throwing API SELECT pg_input_is_valid('11', 'uuid'); SELECT * FROM pg_input_error_info('11', 'uuid');
-- retrieving the inserted data SELECT guid_field FROM guid1;
-- ordering test SELECT guid_field FROM guid1 ORDERBY guid_field ASC; SELECT guid_field FROM guid1 ORDERBY guid_field DESC;
-- = operator test SELECT COUNT(*) FROM guid1 WHERE guid_field = '3f3e3c3b-3a30-3938-3736-353433a2313e';
-- <> operator test SELECT COUNT(*) FROM guid1 WHERE guid_field <> '11111111111111111111111111111111';
-- < operator test SELECT COUNT(*) FROM guid1 WHERE guid_field < '22222222-2222-2222-2222-222222222222';
-- <= operator test SELECT COUNT(*) FROM guid1 WHERE guid_field <= '22222222-2222-2222-2222-222222222222';
-- > operator test SELECT COUNT(*) FROM guid1 WHERE guid_field > '22222222-2222-2222-2222-222222222222';
-- >= operator test SELECT COUNT(*) FROM guid1 WHERE guid_field >= '22222222-2222-2222-2222-222222222222';
-- btree and hash index creation test CREATEINDEX guid1_btree ON guid1 USING BTREE (guid_field); CREATEINDEX guid1_hash ON guid1 USING HASH (guid_field);
-- unique index test CREATEUNIQUEINDEX guid1_unique_BTREE ON guid1 USING BTREE (guid_field);
EXPLAIN (COSTS OFF) SELECT COUNT(*) FROM guid1 WHERE guid_field <> '11111111111111111111111111111111'OR
guid_field <> '3f3e3c3b-3a30-3938-3736-353433a2313e'; EXPLAIN (COSTS OFF) SELECT COUNT(*) FROM guid1 WHERE guid_field <= '22222222-2222-2222-2222-222222222222'OR
guid_field <= '11111111111111111111111111111111'OR
guid_field <= '3f3e3c3b-3a30-3938-3736-353433a2313e'; EXPLAIN (COSTS OFF) SELECT COUNT(*) FROM guid1 WHERE guid_field = '3f3e3c3b-3a30-3938-3736-353433a2313e'OR
guid_field = '11111111111111111111111111111111';
-- should fail INSERTINTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111');
-- check to see whether the new indexes are actually there SELECT count(*) FROM pg_class WHERE relkind='i'AND relname LIKE'guid%';
-- populating the test tables with additional records INSERTINTO guid1(guid_field) VALUES('44444444-4444-4444-4444-444444444444'); INSERTINTO guid2(guid_field) VALUES('11111111-1111-1111-1111-111111111111'); INSERTINTO guid2(guid_field) VALUES('{22222222-2222-2222-2222-222222222222}'); INSERTINTO guid2(guid_field) VALUES('3f3e3c3b3a3039383736353433a2313e');
-- join test SELECT COUNT(*) FROM guid1 g1 INNERJOIN guid2 g2 ON g1.guid_field = g2.guid_field; SELECT COUNT(*) FROM guid1 g1 LEFTJOIN guid2 g2 ON g1.guid_field = g2.guid_field WHERE g2.guid_field ISNULL;
-- generation test
TRUNCATE guid1; INSERTINTO guid1 (guid_field) VALUES (gen_random_uuid()); INSERTINTO guid1 (guid_field) VALUES (gen_random_uuid()); SELECT count(DISTINCT guid_field) FROM guid1;
-- test of uuidv4() alias
TRUNCATE guid1; INSERTINTO guid1 (guid_field) VALUES (uuidv4()); INSERTINTO guid1 (guid_field) VALUES (uuidv4()); SELECT count(DISTINCT guid_field) FROM guid1;
-- generation test for v7
TRUNCATE guid1; INSERTINTO guid1 (guid_field) VALUES (uuidv7()); INSERTINTO guid1 (guid_field) VALUES (uuidv7()); INSERTINTO guid1 (guid_field) VALUES (uuidv7(INTERVAL'1 day')); SELECT count(DISTINCT guid_field) FROM guid1;
-- test sortability of v7 INSERTINTO guid3 (guid_field) SELECT uuidv7() FROM generate_series(1, 10); SELECT array_agg(id ORDERBY guid_field) FROM guid3;
-- Check the timestamp offsets for v7. -- -- generate UUIDv7 values with timestamps ranging from 1970 (the Unix epoch year) -- to 10888 (one year before the maximum possible year), and then verify that -- the extracted timestamps from these UUIDv7 values have not overflowed. WITH uuidts AS ( SELECT y, ts as ts, lag(ts) OVER (ORDERBY y) AS prev_ts FROM (SELECT y, uuid_extract_timestamp(uuidv7((y || ' years')::interval)) AS ts FROM generate_series(1970 - extract(year from now())::int, 10888 - extract(year from now())::int) y)
) SELECT y, ts, prev_ts FROM uuidts WHERE ts < prev_ts;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.