import Ġjava . sql . Connection Ċ import Ġjava . sql . Driver Manager Ċ Ċ class ĠDatabase Cop ier ( ĊĠĠĠ Ġprivate Ġval Ġhost : ĠString , ĊĠĠĠ Ġprivate Ġval Ġport : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġuser : ĠString , ĊĠĠĠ Ġprivate Ġval Ġpassword : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġ< R > Ġwith Connection ( url : ĠString , Ġuser : ĠString , Ġpassword : ĠString , Ġblock : Ġ( Connection ) Ġ-> ĠR ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDriver Manager . getConnection ( url , Ġuser , Ġpassword ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠConnection . execute ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . createStatement (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . execute ( query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy ( from : ĠString , Ġto : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġjdbc Url ( host , Ġport , Ġfrom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Connection ( url , Ġuser , Ġpassword ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Exclusive Connection To ( db , Ġto , Ġfrom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . execute (" drop Ġdatabase Ġif Ġexists Ġ$ to ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . execute (" create Ġdatabase Ġ$ to Ġtemplate Ġ$ from ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġjdbc Url ( host : ĠString , Ġport : ĠInt , Ġdatabase : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġ" jdbc : postgresql :// $ host :$ port /$ database ? Application Name = database - co pi er " ĊĊĠĠĠ Ġprivate Ġfun Ġwith Exclusive Connection To ( db : ĠConnection , Ġvar arg Ġdatabase Names : ĠString , Ġfn : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwhere Dat Names Ġ= Ġdatabase Names . as Sequence (). map ({ Ġ" dat name Ġ= Ġ'$ it '" Ġ}). join ToString (" Ġor Ġ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġno Ġnew Ġconnection Ġcan Ġbe Ġmade Ġto Ġthe Ġprovided Ġdatabases ĊĠĠĠĠĠĠĠ Ġdb . execute (" update Ġpg _ database Ġset Ġdatal low conn Ġ= Ġfalse Ġwhere Ġ$ where Dat Names ; ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġdisconnect Ġevery body Ġelse ĊĠĠĠĠĠĠĠ Ġdb . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT Ġpg _ terminate _ backend ( pg _ stat _ activity . pid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM Ġpg _ stat _ activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġ$ where Dat Names ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġpid Ġ<> Ġpg _ backend _ pid (); """ ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfn () ĊĊĠĠĠĠĠĠĠ Ġ// Ġallow Ġnew Ġconnections Ġagain ĊĠĠĠĠĠĠĠ Ġdb . execute (" update Ġpg _ database Ġset Ġdatal low conn Ġ= Ġtrue Ġwhere Ġ$ where Dat Names ; ") ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ