@@ -17,6 +17,7 @@ public final class FluentPostgreSQLProvider: Provider {
1717
1818 /// See `Provider.register(_:)`
1919 public func register( _ services: inout Services ) throws {
20+ try services. register ( PostgreSQLVersionCheckProvider ( ) )
2021 try services. register ( FluentProvider ( ) )
2122 try services. register ( PostgreSQLProvider ( ) )
2223 }
@@ -25,5 +26,39 @@ public final class FluentPostgreSQLProvider: Provider {
2526 public func boot( _ worker: Container ) throws { }
2627}
2728
29+ /// check server version and override _globalEnableIdentityColumns
30+ /// dirty workaround for missing pre migration hook
31+ public final class PostgreSQLVersionCheckProvider : Provider {
32+ /// See `Provider.repositoryName`
33+ public static let repositoryName = " fluent-postgresql "
34+ 35+ public init ( ) { }
36+ /// See `Provider.register(_:)`
37+ public func register( _ services: inout Services ) throws { }
38+ 39+ /// See `Provider.boot(_:)`
40+ public func boot( _ worker: Container ) throws {
41+ try worker. withConnection ( to: . psql) { conn in
42+ conn. simpleQuery ( " SELECT current_setting('server_version') as version " ) . map ( to: Void . self) { rows in
43+ _serverVersion = try rows [ 0 ] [ " version " ] !. decode ( String . self)
44+ if let versionString = _serverVersion {
45+ let pointIndex = versionString. index ( of: " . " ) ?? versionString. endIndex
46+ let majorVersion = versionString [ ..< pointIndex]
47+ if let ver = Int ( majorVersion) {
48+ _globalEnableIdentityColumns = ver < 10 ? false : _globalEnableIdentityColumns
49+ }
50+ }
51+ }
52+ } . wait ( )
53+ }
54+ 55+ // get current server version
56+ public static func getServerVersion( ) -> String {
57+ return _serverVersion ?? " N/A "
58+ }
59+ }
60+ 61+ /// server version string
62+ internal var _serverVersion : String ?
2863/// Enabled by default
29- internal var _globalEnableIdentityColumns : Bool = true
64+ internal var _globalEnableIdentityColumns : Bool = true
0 commit comments