extensions.ts39 lines · main
1import { ident, safeSql, type SafeSqlFragment } from '../../../pg-format'
2import pgMetaExtensions from '../../../pg-meta-extensions'
3
4export const getDatabaseExtensionsSQL = (): SafeSqlFragment =>
5 safeSql`
6SELECT
7 e.name,
8 n.nspname AS schema,
9 e.default_version,
10 x.extversion AS installed_version,
11 e.comment,
12 ev.schema AS default_version_schema
13FROM
14 pg_available_extensions e
15 LEFT JOIN pg_extension x ON e.name = x.extname
16 LEFT JOIN pg_namespace n ON x.extnamespace = n.oid
17 LEFT JOIN pg_available_extension_versions ev
18 ON ev.name = e.name AND ev.version = e.default_version;
19`
20
21export const getEnableDatabaseExtensionSQL = ({
22 schema,
23 name,
24 version,
25 cascade,
26 createSchema = false,
27}: {
28 schema: string
29 name: string
30 version: string
31 cascade?: boolean
32 createSchema?: boolean
33}): SafeSqlFragment => {
34 const { sql } = pgMetaExtensions.create({ schema, name, version, cascade })
35 return createSchema
36 ? safeSql`CREATE SCHEMA IF NOT EXISTS ${ident(schema)};
37${sql}`
38 : sql
39}