2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-28 11:01:59 +00:00

configDB: improve support for postgresql (tnx to Matze)

git-svn-id: https://svn.fhem.de/fhem/trunk@11560 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
betateilchen 2016-05-29 19:46:13 +00:00
parent 16e1537f2e
commit 34343581db
2 changed files with 21 additions and 11 deletions

View File

@ -81,12 +81,12 @@ sub CommandConfigdb($$) {
$source = $dbname; $source = $dbname;
} elsif ($dbtype eq 'POSTGRESQL') { } elsif ($dbtype eq 'POSTGRESQL') {
# ($dbname,undef) = split (/;/,$dbconn); ($dbname,undef) = split (/;/,$dbconn);
# (undef,$dbname) = split (/=/,$dbname); (undef,$dbname) = split (/=/,$dbname);
# $ret = qx(PGPASSWORD=$dbpass pg_dump -U $dbuser $dbname -f $target); $ret = qx(PGPASSWORD=$dbpass pg_dump -U $dbuser $dbname -f $target);
# return $ret if $ret; return $ret if $ret;
# $source = $dbname; $source = $dbname;
return "configdb dump not yet supported for $dbtype!"; # return "configdb dump not yet supported for $dbtype!";
} else { } else {
return "configdb dump not supported for $dbtype!"; return "configdb dump not supported for $dbtype!";

View File

@ -111,6 +111,9 @@
# #
# 2016-05-28 - added configdb dump (for mysql) # 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; my $fhem_dbh = _cfgDB_Connect;
eval { $fhem_dbh->do("CREATE EXTENSION \"uuid-ossp\"") if($cfgDB_dbtype eq 'POSTGRESQL'); };
# create TABLE fhemversions ifnonexistent # create TABLE fhemversions ifnonexistent
$fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhemversions(VERSION INT, VERSIONUUID CHAR(50))"); $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhemversions(VERSION INT, VERSIONUUID CHAR(50))");
# create TABLE fhemconfig if nonexistent # 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 # check TABLE fhemconfig already populated
my $count = $fhem_dbh->selectrow_array('SELECT count(*) FROM fhemconfig'); my $count = $fhem_dbh->selectrow_array('SELECT count(*) FROM fhemconfig');
if($count < 1) { if($count < 1) {
@ -246,8 +247,8 @@ sub cfgDB_Init() {
# create TABLE fhembinfilesave if nonexistent # create TABLE fhembinfilesave if nonexistent
if($cfgDB_dbtype eq "MYSQL") { if($cfgDB_dbtype eq "MYSQL") {
$fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content MEDIUMBLOB)"); $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content MEDIUMBLOB)");
# my $spaltentyp = $fhem_dbh->do("SHOW FIELDS FROM fhembinfilesave LIKE 'content'"); } elsif ($cfgDB_dbtype eq "POSTGRESQL") {
# Log3(undef,1,$spaltentyp); $fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content bytea)");
} else { } else {
$fhem_dbh->do("CREATE TABLE IF NOT EXISTS fhembinfilesave(filename TEXT, content BLOB)"); $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; my $fhem_dbh = _cfgDB_Connect;
$fhem_dbh->do("delete from fhembinfilesave where filename = '$filename'"); $fhem_dbh->do("delete from fhembinfilesave where filename = '$filename'");
my $sth = $fhem_dbh->prepare('INSERT INTO fhembinfilesave values (?, ?)'); 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->execute($filename, $blobContent);
$sth->finish(); $sth->finish();
$fhem_dbh->commit(); $fhem_dbh->commit();