From e2b47da3eeaf9e52047ea2e0d75edc2434c5c055 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 7 Sep 2025 20:12:56 +0100 Subject: [PATCH] export messages with PostgreSQL database --- src/Simplex/Messaging/Server/Main.hs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Simplex/Messaging/Server/Main.hs b/src/Simplex/Messaging/Server/Main.hs index 90fe52d06..c1d219702 100644 --- a/src/Simplex/Messaging/Server/Main.hs +++ b/src/Simplex/Messaging/Server/Main.hs @@ -60,7 +60,7 @@ import Simplex.Messaging.Transport (supportedProxyClientSMPRelayVRange, alpnSupp import Simplex.Messaging.Transport.Client (TransportHost (..), defaultSocksProxy) import Simplex.Messaging.Transport.HTTP2 (httpALPN) import Simplex.Messaging.Transport.Server (ServerCredentials (..), mkTransportServerConfig) -import Simplex.Messaging.Util (eitherToMaybe, ifM) +import Simplex.Messaging.Util (eitherToMaybe, ifM, unlessM) import System.Directory (createDirectoryIfMissing, doesDirectoryExist, doesFileExist) import System.Exit (exitFailure) import System.FilePath (combine) @@ -140,16 +140,25 @@ smpServerCLI_ generateSite serveStaticFiles attachStaticFiles cfgPath logPath = confirmOrExit ("WARNING: journal directory " <> storeMsgsJournalDir <> " will be exported to message log file " <> storeMsgsFilePath) "Journal not exported" - ms <- newJournalMsgStore logPath MQStoreCfg - -- TODO [postgres] in case postgres configured, queues must be read from database - readQueueStore True (mkQueue ms False) storeLogFile $ stmQueueStore ms - exportMessages True ms storeMsgsFilePath False - putStrLn "Export completed" case readStoreType ini of - Right (ASType SQSMemory SMSMemory) -> putStrLn "store_messages set to `memory`, start the server." - Right (ASType SQSMemory SMSJournal) -> putStrLn "store_messages set to `journal`, update it to `memory` in INI file" - Right (ASType SQSPostgres SMSJournal) -> + Right (ASType SQSMemory msType) -> do + ms <- newJournalMsgStore logPath MQStoreCfg + readQueueStore True (mkQueue ms False) storeLogFile $ stmQueueStore ms + exportMessages True ms storeMsgsFilePath False + putStrLn "Export completed" + putStrLn $ case msType of + SMSMemory -> "store_messages set to `memory`, start the server." + SMSJournal -> "store_messages set to `journal`, update it to `memory` in INI file" + Right (ASType SQSPostgres SMSJournal) -> do #if defined(dbServerPostgres) + let dbStoreLogPath = enableDbStoreLog' ini $> storeLogFilePath + dbOpts@DBOpts {connstr, schema} = iniDBOptions ini defaultDBOpts + unlessM (checkSchemaExists connstr schema) $ do + putStrLn $ "Schema " <> B.unpack schema <> " does not exist in PostrgreSQL database: " <> B.unpack connstr + exitFailure + ms <- newJournalMsgStore logPath $ PQStoreCfg PostgresStoreCfg {dbOpts, dbStoreLogPath, confirmMigrations = MCYesUp, deletedTTL = iniDeletedTTL ini} + exportMessages True ms storeMsgsFilePath False + putStrLn "Export completed" putStrLn "store_messages set to `journal`, store_queues is set to `database`.\nExport queues to store log to use memory storage for messages (`smp-server database export`)." #else noPostgresExit