apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.20.1
    helm.sh/resource-policy: keep
  name: databases.postgresql.cnpg.io
spec:
  group: postgresql.cnpg.io
  names:
    kind: Database
    listKind: DatabaseList
    plural: databases
    singular: database
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
        - jsonPath: .spec.cluster.name
          name: Cluster
          type: string
        - jsonPath: .spec.name
          name: PG Name
          type: string
        - jsonPath: .status.applied
          name: Applied
          type: boolean
        - description: Latest reconciliation message
          jsonPath: .status.message
          name: Message
          type: string
      name: v1
      schema:
        openAPIV3Schema:
          description: Database is the Schema for the databases API
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
              type: string
            kind:
              description: |-
                Kind is a string value representing the REST resource this object represents.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: |-
                Specification of the desired Database.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
              properties:
                allowConnections:
                  description: |-
                    Maps to the `ALLOW_CONNECTIONS` parameter of `CREATE DATABASE` and
                    `ALTER DATABASE`. If false then no one can connect to this database.
                  type: boolean
                builtinLocale:
                  description: |-
                    Maps to the `BUILTIN_LOCALE` parameter of `CREATE DATABASE`. This
                    setting cannot be changed. Specifies the locale name when the
                    builtin provider is used. This option requires `localeProvider` to
                    be set to `builtin`. Available from PostgreSQL 17.
                  type: string
                  x-kubernetes-validations:
                    - message: builtinLocale is immutable
                      rule: self == oldSelf
                cluster:
                  description: The name of the PostgreSQL cluster hosting the database.
                  properties:
                    name:
                      default: ""
                      description: |-
                        Name of the referent.
                        This field is effectively required, but due to backwards compatibility is
                        allowed to be empty. Instances of this type with an empty value here are
                        almost certainly wrong.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                collationVersion:
                  description: |-
                    Maps to the `COLLATION_VERSION` parameter of `CREATE DATABASE`. This
                    setting cannot be changed.
                  type: string
                  x-kubernetes-validations:
                    - message: collationVersion is immutable
                      rule: self == oldSelf
                connectionLimit:
                  description: |-
                    Maps to the `CONNECTION LIMIT` clause of `CREATE DATABASE` and
                    `ALTER DATABASE`. How many concurrent connections can be made to
                    this database. -1 (the default) means no limit.
                  type: integer
                databaseReclaimPolicy:
                  default: retain
                  description: The policy for end-of-life maintenance of this database.
                  enum:
                    - delete
                    - retain
                  type: string
                encoding:
                  description: |-
                    Maps to the `ENCODING` parameter of `CREATE DATABASE`. This setting
                    cannot be changed. Character set encoding to use in the database.
                  type: string
                  x-kubernetes-validations:
                    - message: encoding is immutable
                      rule: self == oldSelf
                ensure:
                  default: present
                  description: Ensure the PostgreSQL database is `present` or `absent` - defaults to "present".
                  enum:
                    - present
                    - absent
                  type: string
                extensions:
                  description: The list of extensions to be managed in the database
                  items:
                    description: ExtensionSpec configures an extension in a database
                    properties:
                      ensure:
                        default: present
                        description: |-
                          Specifies whether an object (e.g schema) should be present or absent
                          in the database. If set to `present`, the object will be created if
                          it does not exist. If set to `absent`, the extension/schema will be
                          removed if it exists.
                        enum:
                          - present
                          - absent
                        type: string
                      name:
                        description: Name of the object (extension, schema, FDW, server)
                        type: string
                      schema:
                        description: |-
                          The name of the schema in which to install the extension's objects,
                          in case the extension allows its contents to be relocated. If not
                          specified (default), and the extension's control file does not
                          specify a schema either, the current default object creation schema
                          is used.
                        type: string
                      version:
                        description: |-
                          The version of the extension to install. If empty, the operator will
                          install the default version (whatever is specified in the
                          extension's control file)
                        type: string
                    required:
                      - name
                    type: object
                  type: array
                fdws:
                  description: The list of foreign data wrappers to be managed in the database
                  items:
                    description: FDWSpec configures an Foreign Data Wrapper in a database
                    properties:
                      ensure:
                        default: present
                        description: |-
                          Specifies whether an object (e.g schema) should be present or absent
                          in the database. If set to `present`, the object will be created if
                          it does not exist. If set to `absent`, the extension/schema will be
                          removed if it exists.
                        enum:
                          - present
                          - absent
                        type: string
                      handler:
                        description: |-
                          Name of the handler function (e.g., "postgres_fdw_handler").
                          This will be empty if no handler is specified. In that case,
                          the default handler is registered when the FDW extension is created.
                        type: string
                      name:
                        description: Name of the object (extension, schema, FDW, server)
                        type: string
                      options:
                        description: Options specifies the configuration options for the FDW.
                        items:
                          description: OptionSpec holds the name, value and the ensure field for an option
                          properties:
                            ensure:
                              default: present
                              description: |-
                                Specifies whether an option should be present or absent in
                                the database. If set to `present`, the option will be
                                created if it does not exist. If set to `absent`, the
                                option will be removed if it exists.
                              enum:
                                - present
                                - absent
                              type: string
                            name:
                              description: Name of the option
                              type: string
                            value:
                              description: Value of the option
                              type: string
                          required:
                            - name
                            - value
                          type: object
                        type: array
                      owner:
                        description: |-
                          Owner specifies the database role that will own the Foreign Data Wrapper.
                          The role must have superuser privileges in the target database.
                        type: string
                      usage:
                        description: List of roles for which `USAGE` privileges on the FDW are granted or revoked.
                        items:
                          description: UsageSpec configures a usage for a foreign data wrapper
                          properties:
                            name:
                              description: Name of the usage
                              type: string
                              x-kubernetes-validations:
                                - message: name is required
                                  rule: self != ''
                            type:
                              default: grant
                              description: The type of usage
                              enum:
                                - grant
                                - revoke
                              type: string
                          required:
                            - name
                          type: object
                        type: array
                      validator:
                        description: |-
                          Name of the validator function (e.g., "postgres_fdw_validator").
                          This will be empty if no validator is specified. In that case,
                          the default validator is registered when the FDW extension is created.
                        type: string
                    required:
                      - name
                    type: object
                  type: array
                icuLocale:
                  description: |-
                    Maps to the `ICU_LOCALE` parameter of `CREATE DATABASE`. This
                    setting cannot be changed. Specifies the ICU locale when the ICU
                    provider is used. This option requires `localeProvider` to be set to
                    `icu`. Available from PostgreSQL 15.
                  type: string
                  x-kubernetes-validations:
                    - message: icuLocale is immutable
                      rule: self == oldSelf
                icuRules:
                  description: |-
                    Maps to the `ICU_RULES` parameter of `CREATE DATABASE`. This setting
                    cannot be changed. Specifies additional collation rules to customize
                    the behavior of the default collation. This option requires
                    `localeProvider` to be set to `icu`. Available from PostgreSQL 16.
                  type: string
                  x-kubernetes-validations:
                    - message: icuRules is immutable
                      rule: self == oldSelf
                isTemplate:
                  description: |-
                    Maps to the `IS_TEMPLATE` parameter of `CREATE DATABASE` and `ALTER
                    DATABASE`. If true, this database is considered a template and can
                    be cloned by any user with `CREATEDB` privileges.
                  type: boolean
                locale:
                  description: |-
                    Maps to the `LOCALE` parameter of `CREATE DATABASE`. This setting
                    cannot be changed. Sets the default collation order and character
                    classification in the new database.
                  type: string
                  x-kubernetes-validations:
                    - message: locale is immutable
                      rule: self == oldSelf
                localeCType:
                  description: |-
                    Maps to the `LC_CTYPE` parameter of `CREATE DATABASE`. This setting
                    cannot be changed.
                  type: string
                  x-kubernetes-validations:
                    - message: localeCType is immutable
                      rule: self == oldSelf
                localeCollate:
                  description: |-
                    Maps to the `LC_COLLATE` parameter of `CREATE DATABASE`. This
                    setting cannot be changed.
                  type: string
                  x-kubernetes-validations:
                    - message: localeCollate is immutable
                      rule: self == oldSelf
                localeProvider:
                  description: |-
                    Maps to the `LOCALE_PROVIDER` parameter of `CREATE DATABASE`. This
                    setting cannot be changed. This option sets the locale provider for
                    databases created in the new cluster. Available from PostgreSQL 16.
                  type: string
                  x-kubernetes-validations:
                    - message: localeProvider is immutable
                      rule: self == oldSelf
                name:
                  description: The name of the database to create inside PostgreSQL. This setting cannot be changed.
                  type: string
                  x-kubernetes-validations:
                    - message: name is immutable
                      rule: self == oldSelf
                    - message: the name postgres is reserved
                      rule: self != 'postgres'
                    - message: the name template0 is reserved
                      rule: self != 'template0'
                    - message: the name template1 is reserved
                      rule: self != 'template1'
                owner:
                  description: |-
                    Maps to the `OWNER` parameter of `CREATE DATABASE`.
                    Maps to the `OWNER TO` command of `ALTER DATABASE`.
                    The role name of the user who owns the database inside PostgreSQL.
                  type: string
                schemas:
                  description: The list of schemas to be managed in the database
                  items:
                    description: SchemaSpec configures a schema in a database
                    properties:
                      ensure:
                        default: present
                        description: |-
                          Specifies whether an object (e.g schema) should be present or absent
                          in the database. If set to `present`, the object will be created if
                          it does not exist. If set to `absent`, the extension/schema will be
                          removed if it exists.
                        enum:
                          - present
                          - absent
                        type: string
                      name:
                        description: Name of the object (extension, schema, FDW, server)
                        type: string
                      owner:
                        description: |-
                          The role name of the user who owns the schema inside PostgreSQL.
                          It maps to the `AUTHORIZATION` parameter of `CREATE SCHEMA` and the
                          `OWNER TO` command of `ALTER SCHEMA`.
                        type: string
                    required:
                      - name
                    type: object
                  type: array
                servers:
                  description: The list of foreign servers to be managed in the database
                  items:
                    description: ServerSpec configures a server of a foreign data wrapper
                    properties:
                      ensure:
                        default: present
                        description: |-
                          Specifies whether an object (e.g schema) should be present or absent
                          in the database. If set to `present`, the object will be created if
                          it does not exist. If set to `absent`, the extension/schema will be
                          removed if it exists.
                        enum:
                          - present
                          - absent
                        type: string
                      fdw:
                        description: The name of the Foreign Data Wrapper (FDW)
                        type: string
                        x-kubernetes-validations:
                          - message: fdw is required
                            rule: self != ''
                      name:
                        description: Name of the object (extension, schema, FDW, server)
                        type: string
                      options:
                        description: |-
                          Options specifies the configuration options for the server
                          (key is the option name, value is the option value).
                        items:
                          description: OptionSpec holds the name, value and the ensure field for an option
                          properties:
                            ensure:
                              default: present
                              description: |-
                                Specifies whether an option should be present or absent in
                                the database. If set to `present`, the option will be
                                created if it does not exist. If set to `absent`, the
                                option will be removed if it exists.
                              enum:
                                - present
                                - absent
                              type: string
                            name:
                              description: Name of the option
                              type: string
                            value:
                              description: Value of the option
                              type: string
                          required:
                            - name
                            - value
                          type: object
                        type: array
                      usage:
                        description: List of roles for which `USAGE` privileges on the server are granted or revoked.
                        items:
                          description: UsageSpec configures a usage for a foreign data wrapper
                          properties:
                            name:
                              description: Name of the usage
                              type: string
                              x-kubernetes-validations:
                                - message: name is required
                                  rule: self != ''
                            type:
                              default: grant
                              description: The type of usage
                              enum:
                                - grant
                                - revoke
                              type: string
                          required:
                            - name
                          type: object
                        type: array
                    required:
                      - fdw
                      - name
                    type: object
                  type: array
                tablespace:
                  description: |-
                    Maps to the `TABLESPACE` parameter of `CREATE DATABASE`.
                    Maps to the `SET TABLESPACE` command of `ALTER DATABASE`.
                    The name of the tablespace (in PostgreSQL) that will be associated
                    with the new database. This tablespace will be the default
                    tablespace used for objects created in this database.
                  type: string
                template:
                  description: |-
                    Maps to the `TEMPLATE` parameter of `CREATE DATABASE`. This setting
                    cannot be changed. The name of the template from which to create
                    this database.
                  type: string
                  x-kubernetes-validations:
                    - message: template is immutable
                      rule: self == oldSelf
              required:
                - cluster
                - name
                - owner
              type: object
              x-kubernetes-validations:
                - message: builtinLocale is only available when localeProvider is set to `builtin`
                  rule: '!has(self.builtinLocale) || self.localeProvider == ''builtin'''
                - message: icuLocale is only available when localeProvider is set to `icu`
                  rule: '!has(self.icuLocale) || self.localeProvider == ''icu'''
                - message: icuRules is only available when localeProvider is set to `icu`
                  rule: '!has(self.icuRules) || self.localeProvider == ''icu'''
            status:
              description: |-
                Most recently observed status of the Database. This data may not be up to
                date. Populated by the system. Read-only.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
              properties:
                applied:
                  description: Applied is true if the database was reconciled correctly
                  type: boolean
                extensions:
                  description: Extensions is the status of the managed extensions
                  items:
                    description: DatabaseObjectStatus is the status of the managed database objects
                    properties:
                      applied:
                        description: |-
                          True of the object has been installed successfully in
                          the database
                        type: boolean
                      message:
                        description: Message is the object reconciliation message
                        type: string
                      name:
                        description: The name of the object
                        type: string
                    required:
                      - applied
                      - name
                    type: object
                  type: array
                fdws:
                  description: FDWs is the status of the managed FDWs
                  items:
                    description: DatabaseObjectStatus is the status of the managed database objects
                    properties:
                      applied:
                        description: |-
                          True of the object has been installed successfully in
                          the database
                        type: boolean
                      message:
                        description: Message is the object reconciliation message
                        type: string
                      name:
                        description: The name of the object
                        type: string
                    required:
                      - applied
                      - name
                    type: object
                  type: array
                message:
                  description: Message is the reconciliation output message
                  type: string
                observedGeneration:
                  description: |-
                    A sequence number representing the latest
                    desired state that was synchronized
                  format: int64
                  type: integer
                schemas:
                  description: Schemas is the status of the managed schemas
                  items:
                    description: DatabaseObjectStatus is the status of the managed database objects
                    properties:
                      applied:
                        description: |-
                          True of the object has been installed successfully in
                          the database
                        type: boolean
                      message:
                        description: Message is the object reconciliation message
                        type: string
                      name:
                        description: The name of the object
                        type: string
                    required:
                      - applied
                      - name
                    type: object
                  type: array
                servers:
                  description: Servers is the status of the managed servers
                  items:
                    description: DatabaseObjectStatus is the status of the managed database objects
                    properties:
                      applied:
                        description: |-
                          True of the object has been installed successfully in
                          the database
                        type: boolean
                      message:
                        description: Message is the object reconciliation message
                        type: string
                      name:
                        description: The name of the object
                        type: string
                    required:
                      - applied
                      - name
                    type: object
                  type: array
              type: object
          required:
            - metadata
            - spec
          type: object
      served: true
      storage: true
      subresources:
        status: {}
