use 5.008001; use strict; use warnings; package Metabase::Backend::PostgreSQL; our $VERSION = '1.000'; # VERSION # ABSTRACT: Metabase backend implemented using PostgreSQL use Moose::Role; use namespace::autoclean; with 'Metabase::Backend::SQL'; has db_name => ( is => 'ro', isa => 'Str', required => 1, ); sub _build_dsn { my $self = shift; return "dbi:Pg:dbname=" . $self->db_name; } sub _build_db_user { return "" } sub _build_db_pass { return "" } sub _build_db_type { return "PostgreSQL" } sub _fixup_sql_diff { my ($self, $diff) = @_; # Strip DROP INDEX $diff =~ s/DROP INDEX .*;//mg; # Strip ALTER TABLES constraint drops $diff =~ s/ALTER TABLE \S+ ADD CONSTRAINT.*;//mg; return $diff; } around _build_dbis => sub { my $orig = shift; my $self = shift; my $dbis = $self->$orig; $dbis->abstract = SQL::Abstract->new( quote_char => q{"}, ); return $dbis; }; sub _build__blob_field_params { return { data_type => 'text' }; } sub _build__guid_field_params { return { data_type => 'uuid' } } my $hex = qr/[0-9a-f]/i; sub _munge_guid { my ($self, $guid) = @_; $guid = "00000000-0000-0000-0000-000000000000" unless $guid =~ /${hex}{8}-${hex}{4}-${hex}{4}-${hex}{4}-${hex}{12}/; return $guid; } sub _unmunge_guid { lc return $_[1] } 1; # vim: ts=2 sts=2 sw=2 et: __END__ =pod =head1 NAME Metabase::Backend::PostgreSQL - Metabase backend implemented using PostgreSQL =head1 VERSION version 1.000 =head1 SYNOPSIS use Metabase::Archive::PostgreSQL; use Metabase::Index::PostgreSQL; my $archive = Metabase::Archive::PostgreSQL->new( db_name => "cpantesters", db_user => "johndoe", db_pass => "PaSsWoRd", ); my $index = Metabase::Index::PostgreSQL->new( db_name => "cpantesters", db_user => "johndoe", db_pass => "PaSsWoRd", ); =head1 DESCRIPTION This distribution provides a backend for L using PostgreSQL. There are two modules included, L and L. They can be used separately or together (see L for details). The L module is a L that provides common attributes and private helpers and is not intended to be used directly. Common attributes are described further below. =head1 ATTRIBUTES =head2 db_name Database name =head2 db_user Database username =head2 db_pass Database password =for Pod::Coverage method_names_here =head1 AUTHORS =over 4 =item * David Golden =item * Leon Brocard =back =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2011 by David Golden. This is free software, licensed under: The Apache License, Version 2.0, January 2004 =cut