@@ -7,18 +7,52 @@ type PostgresConfig =
7
7
password: string
8
8
database: string }
9
9
10
+ type PoolingConfig =
11
+ { minSize: int option
12
+ maxSize: int option
13
+ connectionIdleLifeTime: int option
14
+ connectionPruningInterval: int option }
15
+
10
16
module Postgres =
17
+ let private storeSettings ( config : PostgresConfig ): string =
18
+ sprintf
19
+ " Host=%s ;Port=%s ;User Id=%s ;Password=%s ;Database=%s "
20
+ config.host
21
+ config.port
22
+ config.username
23
+ config.password
24
+ config.database
25
+
26
+ let private poolingSettings ( pooling : PoolingConfig ): string =
27
+ let minSize = pooling.minSize |> Option.defaultValue 0
28
+
29
+ let maxSize =
30
+ pooling.maxSize |> Option.defaultValue 100
31
+
32
+ let connectionPruningInterval =
33
+ pooling.connectionPruningInterval
34
+ |> Option.defaultValue 300
35
+
36
+ let connectionIdleLifeTime =
37
+ pooling.connectionIdleLifeTime
38
+ |> Option.defaultValue 10
39
+
40
+ sprintf
41
+ " Minimum Pool Size=%d ;Maximum Pool Size=%d ;Connection Idle Lifetime=%d ;Connection Pruning Interval%d "
42
+ minSize
43
+ maxSize
44
+ connectionPruningInterval
45
+ connectionIdleLifeTime
46
+
47
+ let private storeSettingsWithPooling ( config : PostgresConfig ) ( pooling : PoolingConfig ): string =
48
+ sprintf " %s ;%s " ( storeSettings config) ( poolingSettings pooling)
49
+
11
50
let createStore ( config : PostgresConfig ): SqlStreamStore.PostgresStreamStore =
12
- let storeSettings : string =
13
- sprintf
14
- " Host=%s ;Port=%s ;User Id=%s ;Password=%s ;Database=%s "
15
- config.host
16
- config.port
17
- config.username
18
- config.password
19
- config.database
20
-
21
- new SqlStreamStore.PostgresStreamStore( SqlStreamStore.PostgresStreamStoreSettings( storeSettings))
51
+ new SqlStreamStore.PostgresStreamStore( SqlStreamStore.PostgresStreamStoreSettings( storeSettings config))
52
+
53
+ let createStoreWithPoolingConfig ( config : PostgresConfig ) ( pooling : PoolingConfig ): SqlStreamStore.PostgresStreamStore =
54
+ new SqlStreamStore.PostgresStreamStore( SqlStreamStore.PostgresStreamStoreSettings
55
+ ( storeSettingsWithPooling config pooling))
22
56
23
57
let createSchema ( store : SqlStreamStore.PostgresStreamStore ): Async < unit > =
24
58
store.CreateSchemaIfNotExists() |> Async.AwaitTask
0 commit comments