https://github.com/sqids/sqids-plpgsql
Official PLpgSQL (PostgreSQL) port of Sqids. Generate short unique IDs from numbers.
https://github.com/sqids/sqids-plpgsql
hashids id id-generator pg plpgsql postgresql short-id short-url sqids uid unique-id unique-id-generator
Last synced: 8 months ago
JSON representation
Official PLpgSQL (PostgreSQL) port of Sqids. Generate short unique IDs from numbers.
- Host: GitHub
- URL: https://github.com/sqids/sqids-plpgsql
- Owner: sqids
- License: mit
- Created: 2023-06-24T15:36:40.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-15T17:52:43.000Z (about 1 year ago)
- Last Synced: 2025-02-01T02:41:24.313Z (8 months ago)
- Topics: hashids, id, id-generator, pg, plpgsql, postgresql, short-id, short-url, sqids, uid, unique-id, unique-id-generator
- Language: PLpgSQL
- Homepage: https://sqids.org/plpgsql
- Size: 16.6 KB
- Stars: 19
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# [Sqids PLpgSQL](https://sqids.org/plpgsql)
[Sqids](https://sqids.org/plpgsql) (pronounced "squids") is a small library that lets you **generate unique IDs from numbers**. It's good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.
Features:
- **Encode multiple numbers** - generate short IDs from one or several non-negative numbers
- **Quick decoding** - easily decode IDs back into numbers
- **Unique IDs** - generate unique IDs by shuffling the alphabet once
- **ID padding** - provide minimum length to make IDs more uniform
- **URL safe** - auto-generated IDs do not contain common profanity
- **Randomized output** - Sequential input provides nonconsecutive IDs
- **Many implementations** - Support for [40+ programming languages](https://sqids.org/)## ๐งฐ Use-cases
Good for:
- Generating IDs for public URLs (eg: link shortening)
- Generating IDs for internal systems (eg: event tracking)
- Decoding for quicker database lookups (eg: by primary keys)Not good for:
- Sensitive data (this is not an encryption library)
- User IDs (can be decoded revealing user count)## ๐ Getting started
### Important notes
> **Note**
> ๐ง The `src/install.sql` file is idempotent but destructive. It will `DROP SCHEMA sqids` so be sure you aren't using a schema with that name!The blocklist is stored in a table. If you need it to somehow be dynamic per-call, you can likely use transactions, but I have not tested it.
### Compatibility
Written & tested on Postgres 15.6. The functions used are pretty simple - it will likely work on 9+ (definitely not earlier). Be sure to install & run tests!
### Installation
Simply run `src/install.sql` on your database.
## ๐ฉโ๐ป Examples
After install, use encode & decode:
encode takes an array of BIGINT, an alphabet, and an optional minLength.
```sql
select sqids.encode(array[123, 456, 789], 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 12); -- EBDQWDLPCTHG
```decode requires the id and alphabet. It returns an array of BIGINT.
```sql
select sqids.decode('EBDQWDLPCTHG', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'); -- {123,456,789}
```### With default alphabet & min length (0)
```sql
select sqids.encode(array[123, 456, 789]); --eVH6til6J
```### With default alphabet & custom min length
```sql
select sqids.encode(array[123, 456, 789], 12); --eVH6til6J03E
```### Decode with default alphabet
```sql
select sqids.decode('eVH6til6J03E'); -- {123,456,789}
```## ๐งช Testing
Run the sql files in tests dir to install.
Then run:
```sql
select sqids.alphabet_test();
select sqids.blocklist_test();
select sqids.encoding_test();
select sqids.minlength_test();
```## ๐ License
[MIT](LICENSE)