Создать базу данных PostgreSQL
Если у вас есть кластер PostgreSQL в проекте, вы можете создать в нем базу данных. База данных описывается ресурсом PostgresqlDatabase. Владелец базы данных задается через поле spec.owner и должен соответствовать существующей роли PostgreSQL — см. Создать пользователя PostgreSQL.
Через CLI
-
Создайте файл ресурса
PostgresqlDatabase. Например, с помощью командыtouch postgresqldatabase.yaml. -
Откройте файл и вставьте конфигурацию ниже:
Минимальная конфигурацияЛокаль libcЛокаль ICUЛокаль builtinСхемыapiVersion: postgresql.stackland.yandex.cloud/v1alpha1 kind: PostgresqlDatabase metadata: name: test-cluster-test-database spec: cluster: test-cluster # имя ресурса PostgresqlCluster name: test-database # имя базы данных в PostgreSQL owner: test-user # роль-владелец базы данныхВ манифесте заданы только обязательные поля: имя кластера, имя базы данных и роль-владелец.
Конфигурация с провайдером локали
libcи параметрамиlocale,localeCollate,localeCType.apiVersion: postgresql.stackland.yandex.cloud/v1alpha1 kind: PostgresqlDatabase metadata: name: test-cluster-test-database spec: cluster: test-cluster name: test-database owner: test-user template: template1 # шаблон, на основе которого создается база данных encoding: UTF8 # кодировка символов localeProvider: libc # провайдер локали locale: en_US.UTF-8 # локаль по умолчанию localeCollate: en_US.UTF-8 # правило сортировки строк localeCType: en_US.UTF-8 # правило классификации символовКонфигурация с провайдером локали
icuи параметрамиicuLocale,icuRules. Доступна с PostgreSQL 15.apiVersion: postgresql.stackland.yandex.cloud/v1alpha1 kind: PostgresqlDatabase metadata: name: test-cluster-test-database spec: cluster: test-cluster name: test-database owner: test-user template: template1 encoding: UTF8 localeProvider: icu # провайдер локали icuLocale: en-US # имя ICU-локали icuRules: "" # дополнительные правила ICU collationКонфигурация с провайдером локали
builtinи параметромbuiltinLocale. Доступна с PostgreSQL 17.apiVersion: postgresql.stackland.yandex.cloud/v1alpha1 kind: PostgresqlDatabase metadata: name: test-cluster-test-database spec: cluster: test-cluster name: test-database owner: test-user template: template1 encoding: UTF8 localeProvider: builtin # провайдер локали; доступен с PostgreSQL 17 builtinLocale: C.UTF-8 # имя встроенной локалиКонфигурация с управляемыми схемами PostgreSQL.
apiVersion: postgresql.stackland.yandex.cloud/v1alpha1 kind: PostgresqlDatabase metadata: name: test-cluster-test-database spec: cluster: test-cluster name: test-database owner: test-user allowConnections: true # разрешить подключения к базе данных connectionLimit: -1 # лимит подключений, -1 — без лимита isTemplate: false # использовать базу данных как шаблон tablespace: pg_default # tablespace по умолчанию schemas: # управляемые схемы - name: test-schema owner: test-user state: present # present — создать или поддерживать, absent — удалитьВ блоке
spec.schemasопишите схемы базы данных: имя, владелец (необязательно) и состояние (present— создать,absent— удалить). -
Примените манифест:
kubectl apply -f postgresqldatabase.yaml -n <название_проекта>. При необходимости можно прописать название проекта в параметр ресурсаmetadata.namespaceи не использовать в команде.
После создания нельзя изменить поля name, template, encoding, localeProvider, locale, localeCollate, localeCType, icuLocale, icuRules, builtinLocale, collationVersion.