From d9f0735ee524bcffe679243e2ff4455e9b1cefa4 Mon Sep 17 00:00:00 2001 From: betateilchen <> Date: Sun, 29 May 2016 19:46:13 +0000 Subject: [PATCH] configDB: improve support for postgresql (tnx to Matze) git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@11560 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/98_configdb.pm | 12 ++++++------ configDB.pm | 20 +++++++++++++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/FHEM/98_configdb.pm b/FHEM/98_configdb.pm index d75d43282..fa50e9801 100644 --- a/FHEM/98_configdb.pm +++ b/FHEM/98_configdb.pm @@ -81,12 +81,12 @@ sub CommandConfigdb($$) { $source = $dbname; } elsif ($dbtype eq 'POSTGRESQL') { -# ($dbname,undef) = split (/;/,$dbconn); -# (undef,$dbname) = split (/=/,$dbname); -# $ret = qx(PGPASSWORD=$dbpass pg_dump -U $dbuser $dbname -f $target); -# return $ret if $ret; -# $source = $dbname; - return "configdb dump not yet supported for $dbtype!"; + ($dbname,undef) = split (/;/,$dbconn); + (undef,$dbname) = split (/=/,$dbname); + $ret = qx(PGPASSWORD=$dbpass pg_dump -U $dbuser $dbname -f $target); + return $ret if $ret; + $source = $dbname; +# return "configdb dump not yet supported for $dbtype!"; } else { return "configdb dump not supported for $dbtype!"; diff --git a/configDB.pm b/configDB.pm index 8a53d96d1..b708d20f4 100644 --- a/configDB.pm +++ b/configDB.pm @@ -111,6 +111,9 @@ # # 2016-05-28 - added configdb dump (for mysql) # +# 2016-05-29 - changed improve support for postgresql (tnx to Matze) +# added configdb dump (for postgresql) +# ############################################################################## # @@ -216,13 +219,11 @@ sub cfgDB_Init() { my $fhem_dbh = _cfgDB_Connect; - eval { $fhem_dbh->do("CREATE EXTENSION \"uuid-ossp\"") if($cfgDB_dbtype eq 'POSTGRESQL'); }; - # create TABLE fhemversions ifnonexistent $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhemversions(VERSION INT, VERSIONUUID CHAR(50))"); # create TABLE fhemconfig if nonexistent - $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhemconfig(COMMAND CHAR(32), DEVICE CHAR(32), P1 CHAR(50), P2 TEXT, VERSION INT, VERSIONUUID CHAR(50))"); + $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhemconfig(COMMAND VARCHAR(32), DEVICE VARCHAR(32), P1 VARCHAR(50), P2 TEXT, VERSION INT, VERSIONUUID CHAR(50))"); # check TABLE fhemconfig already populated my $count = $fhem_dbh->selectrow_array('SELECT count(*) FROM fhemconfig'); if($count < 1) { @@ -246,8 +247,8 @@ sub cfgDB_Init() { # create TABLE fhembinfilesave if nonexistent if($cfgDB_dbtype eq "MYSQL") { $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content MEDIUMBLOB)"); -# my $spaltentyp = $fhem_dbh->do("SHOW FIELDS FROM fhembinfilesave LIKE 'content'"); -# Log3(undef,1,$spaltentyp); + } elsif ($cfgDB_dbtype eq "POSTGRESQL") { + $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content bytea)"); } else { $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content BLOB)"); } @@ -1036,6 +1037,15 @@ sub _cfgDB_binFileimport($$;$) { my $fhem_dbh = _cfgDB_Connect; $fhem_dbh->do("delete from fhembinfilesave where filename = '$filename'"); my $sth = $fhem_dbh->prepare('INSERT INTO fhembinfilesave values (?, ?)'); + +# add support for postgresql by Matze + $sth->bind_param( 1, $filename ); + if ($cfgDB_dbtype eq "POSTGRESQL") { + $sth->bind_param( 2, $blobContent, { pg_type => DBD::Pg::PG_BYTEA() } ); + } else { + $sth->bind_param( 2, $blobContent ); + } + $sth->execute($filename, $blobContent); $sth->finish(); $fhem_dbh->commit();