NAME

Yancy::Backend::Pg - A backend for Postgres using Mojo::Pg

VERSION

version 1.081

SYNOPSIS

### URL string
use Mojolicious::Lite;
plugin Yancy => {
    backend => 'pg://user:pass@localhost/mydb',
    read_schema => 1,
};

### Mojo::Pg object
use Mojolicious::Lite;
use Mojo::Pg;
plugin Yancy => {
    backend => { Pg => Mojo::Pg->new( 'postgres:///myapp' ) },
    read_schema => 1,
};

### Hashref
use Mojolicious::Lite;
plugin Yancy => {
    backend => {
        Pg => {
            dsn => 'dbi:Pg:dbname',
            username => 'fry',
            password => 'b3nd3r1sgr34t',
        },
    },
    read_schema => 1,
};

DESCRIPTION

This Yancy backend allows you to connect to a Postgres database to manage the data inside. This backend uses Mojo::Pg to connect to Postgres.

See Yancy::Backend for the methods this backend has and their return values.

Backend URL

The URL for this backend takes the form pg://<user>:<pass>@<host>:<port>/<db>.

Some examples:

# Just a DB
pg:///mydb

# User+DB (server on localhost:5432)
pg://user@/mydb

# User+Pass Host and DB
pg://user:pass@example.com/mydb

Schema Names

The schema names for this backend are the names of the tables in the database.

So, if you have the following schema:

CREATE TABLE people (
    id SERIAL,
    name VARCHAR NOT NULL,
    email VARCHAR NOT NULL
);
CREATE TABLE business (
    id SERIAL,
    name VARCHAR NOT NULL,
    email VARCHAR NULL
);

You could map that to the following schema:

{
    backend => 'pg://user@/mydb',
    schema => {
        People => {
            required => [ 'name', 'email' ],
            properties => {
                id => {
                    type => 'integer',
                    readOnly => 1,
                },
                name => { type => 'string' },
                email => { type => 'string' },
            },
        },
        Business => {
            required => [ 'name' ],
            properties => {
                id => {
                    type => 'integer',
                    readOnly => 1,
                },
                name => { type => 'string' },
                email => { type => 'string' },
            },
        },
    },
}

Ignored Tables

By default, this backend will ignore some tables when using read_schema: Tables used by Mojo::Pg::Migrations, DBIx::Class::Schema::Versioned (in case we're co-habitating with a DBIx::Class schema), and all the tables used by the Minion::Backend::Pg Minion backend.

SEE ALSO

Mojo::Pg, Yancy

AUTHOR

Doug Bell <preaction@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Doug Bell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.