Short links manager extension for PostgreSQL using postgres.js
npm install @potonz/shortlinks-manager-postgresPostgreSQL backend for short links manager using postgres.js.
- Full PostgreSQL support with prepared statements via postgres.js
- Automatic table creation and indexing
- Support for PostgreSQL 14, 15, 16, 17, and 18
- Type-safe SQL with tagged template literals
- Efficient parameterized queries
``bash`
bun add @potonz/shortlinks-manager-postgres
`typescript
import { createManager } from "@potonz/shortlinks-manager";
import { createPostgresBackend } from "@potonz/shortlinks-manager-postgres";
// Create backend with connection URI
const backend = createPostgresBackend("postgres://user:password@localhost:5432/shortlinks");
// Initialize tables (run once during setup)
await backend.setupTables();
// Create manager
const manager = await createManager({
backend,
shortIdLength: 6,
onShortIdLengthUpdated: (newLength) => {
console.log(Short ID length updated to ${newLength});
},
});
// Create short link
const shortId = await manager.createShortLink("https://example.com");
console.log(Created short link: ${shortId});
// Resolve short link
const targetUrl = await manager.getTargetUrl(shortId);
console.log(Target URL: ${targetUrl});`
The backend automatically creates the following table:
`sql
CREATE TABLE IF NOT EXISTS sl_links_map (
short_id VARCHAR(255) NOT NULL PRIMARY KEY,
target_url TEXT NOT NULL,
last_accessed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_sl_links_map_last_accessed_at
ON sl_links_map(last_accessed_at);
`
Creates a PostgreSQL backend instance.
Parameters:
- connectionUri - PostgreSQL connection URI (e.g., postgres://user:password@localhost:5432/dbname)
Returns: IShortLinksManagerPostgresBackend
Creates the required database tables and indexes. Should be called once during application initialization.
Implements all IShortLinksManagerBackend methods:
- getTargetUrl(shortId) - Get target URL by short IDcreateShortLink(shortId, targetUrl)
- - Create a new short linkcheckShortIdsExist(shortIds)
- - Check which short IDs already existupdateShortLinkLastAccessTime(shortId, time)
- - Update last accessed timestampcleanUnusedLinks(maxAge)
- - Remove links not accessed in maxAge daysremoveShortLink(shortId)
- - Remove a short link by ID
Tests run automatically in CI against PostgreSQL versions 14, 15, 16, 17, and 18.
To run tests locally:
`bashStart PostgreSQL (using Docker)
docker run --name shortlinks-postgres -e POSTGRES_PASSWORD=password -e POSTGRES_DB=shortlinks -p 5432:5432 -d postgres:16
- PostgreSQL 14 (until 2026)
- PostgreSQL 15
- PostgreSQL 16
- PostgreSQL 17
- PostgreSQL 18 (latest)
MIT