3 ms·
Yeah, the "lacks type safety" comment threw me too. SQL has some of the most rigid type safety in my daily interactions in computing. • "Exactly one" •
by ttfkam 4y ago
Yeah, the "lacks type safety" comment threw me too. SQL has some of the most rigid type safety in my daily interactions in computing.
• "Exactly one"
• "Optional"
• "Text but matching this pattern"
• "A 16-bit integer from 1 to 1000"
• "Many to many without any duplicates"
• "A unique combination of id and a time range"
• "This field can be NULL but only if this other field is NOT NULL"
- yencabulator 4y agoNow store a 64-bit unsigned integer in Postgres.
- anarazel 4y agoCREATE DOMAIN unsigned_64bit_int AS numeric CONSTRAINT range CHECK (VALUE >= 0 AND VALUE < 2^64 AND round(VALUE) = VALUE);
- crabbone 4y agoUse bigint with check-between constraint? Maybe inconvenient, but not impossible... but if this is the kind of problem you have, then, try in your favorite language to create integers that are 63 bit long or 65, and see how it goes? Looks like the comparison won't be in that language's favor.
- yencabulator 4y agoPostgres bigint is a signed 64-bit integer, not an unsigned one. https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-NUMERIC-TABLE https://www.postgresql.org/docs/current/datatype-numeric.htm... Trying to use it to store the full range of unsigned values would mean awkward math everywhere, to convert between the two ranges. Lots of software uses uint64s, for e.g. as identifiers handed out by some API, and not being able to store them conveniently definitely hurts.
- ttfkam 4y agoNow store a 64-bit unsigned integer in Java. Or TypeScript. Or Lua. Or Python. Now explain why you need an unsigned bigint in this set-oriented language. What's your use case? That said, not a limitation of SQL, just Postgres, who avoided it for similar maintenance and interoperability issues that Java avoided them. MySQL supports unsigned bigint just fine. There is nothing in the SQL spec that forbids unsigned integer values.
- ttfkam 4y agoApparently there's an extension for that! https://github.com/petere/pguint https://github.com/petere/pguint