pg_hashids provides a secure way to generate short, unique, non-sequential ids from numbers. The hashes are intended to be small, easy-to-remember identifiers that can be used to obfuscate data (optionally) with a password, alphabet, and salt. For example, you may wish to hide data like user IDs, order numbers, or tracking codes in favor of pg_hashid's unique identifiers.
Enable the extension
- Go to the Database page in the Dashboard.
- Click on Extensions in the sidebar.
- Search for "pg_hashids" and enable the extension.
-- Enable the "pg_hashids" extension
create extension pg_hashids with schema extensions;
-- Disable the "pg_hashids" extension
drop extension if exists pg_hashids;
Even though the SQL code is create extension, this is the equivalent of "enabling the extension".
To disable an extension you can call drop extension.
It's good practice to create the extension within a separate schema (like extensions) to keep your public schema clean.
Usage
Suppose we have a table that stores order information, and we want to give customers a unique identifier without exposing the sequential id column. To do this, we can use pg_hashid's id_encode function.
create table orders (
id serial primary key,
description text,
price_cents bigint
);
insert into orders (description, price_cents)
values ('a book', 9095);
select
id,
id_encode(id) as short_id,
description,
price_cents
from
orders;
id | short_id | description | price_cents
----+----------+-------------+-------------
1 | jR | a book | 9095
(1 row)
To reverse the short_id back into an id, there is an equivalent function named id_decode.
Resources
- Official pg_hashids documentation