Action "db.schema"
Create or modify a schema for the destination database.
A PostgreSQL database contains one or multiple schemas which in turns contains table, data types, functions, and operators.
Note, PostgreSQL default to the default root database while Nikita enforce the
presence of the targeted database.
Create Schema example
const {$status} = await nikita.db.schema({
  admin_username: 'test',
  admin_password: 'test',
  database: 'my_database'
  schema: 'my_schema'
})
console.info(`Schema created or modified: ${$status}`)Schema definitions
definitions =
  config:
    type: 'object'
    properties:
      'admin_username':
        $ref: 'module://@nikitajs/db/src/query#/definitions/config/properties/admin_username'
      'admin_password':
        $ref: 'module://@nikitajs/db/src/query#/definitions/config/properties/admin_password'
      'database':
        type: 'string'
        description: '''
        The database name where the schema is created.
        '''
      'engine':
        $ref: 'module://@nikitajs/db/src/query#/definitions/config/properties/engine'
      'host':
        $ref: 'module://@nikitajs/db/src/query#/definitions/config/properties/host'
      'port':
        $ref: 'module://@nikitajs/db/src/query#/definitions/config/properties/port'
      'owner':
        type: 'string'
        description: '''
        The Schema owner. Alter Schema if schema already exists.
        '''
      'schema':
        type: 'string'
        description: '''
        New schema name.
        '''
    required: ['admin_username', 'admin_password', 'database', 'engine', 'host', 'schema']Handler
handler = ({config}) ->
  {$status} = await @execute
    $shy: true
    code: [0, 2]
    command: db.command config, '\\dt'
  throw Error "Database does not exist #{config.database}" if !$status
  await @db.query config,
    command: "CREATE SCHEMA #{config.schema};"
    $unless_execute: db.command(config, "SELECT 1 FROM pg_namespace WHERE nspname = '#{config.schema}';") + " | grep 1"
  # Check if owner is the good one
  {stderr} = await @execute
    $if: config.owner?
    $unless_execute: db.command(config, '\\dn') + " | grep '#{config.schema}|#{config.owner}'"
    command: db.command config, "ALTER SCHEMA #{config.schema} OWNER TO #{config.owner};"
    code: [0, 1]
  throw Error "Owner #{config.owner} does not exists" if /^ERROR:\s\srole.*does\snot\sexist/.test stderrExports
module.exports =
  handler: handler
  metadata:
    global: 'db'
    definitions: definitionsDependencies
{db} = require '../utils'