2017-02-24 2 views
1

J'utilise SQLProvider pour me connecter à ma base de données PostgreSQL (locale) en F #. J'ai commencé avec ce code de fsprojects:Npgsql renvoie une erreur: chaîne de connexion incorrecte. Impossible de se connecter à postgreSQL [F #]

open FSharp.Data.Sql 
open Npgsql 

let [<Literal>] ResolutionPath = 
    __SOURCE_DIRECTORY__ + @"/../../packages/Npgsql/lib/net451/" 

[<Literal>] 
let connectionString = "Host=localhost;Port=5432;User ID=test;Password=test;Database=testdb;" 

type PostgreSQL = 
    SqlDataProvider< 
     Common.DatabaseProviderTypes.POSTGRESQL, 
     ConnectionString = connectionString, 
     ResolutionPath = ResolutionPath, 
     IndividualsAmount = 1000, 
     UseOptionTypes = true> 

Quand je suis en train de compiler je reçois ce message d'erreur:

(path)/Database.fs(60,9): error FS3033: The type provider 'FSharp.Data.Sql.SqlTypeProvider' reported an error: Could not create the connection, most likely this means that the connectionString is wrong. See error from Npgsql to troubleshoot: The type initializer for 'Npgsql.Counters' threw an exception. (path)/Database.fs(60,9): error FS3033: The type provider 'FSharp.Data.Sql.SqlTypeProvider' reported an error: Could not create the connection, most likely this means that the connectionString is wrong. See error from Npgsql to troubleshoot: The type initializer for 'Npgsql.Counters' threw an exception.

J'ai vérifié que l'ID utilisateur et mot de passe et tout dans la chaîne de connexion est correcte. En fait, je n'ai aucune idée de comment déboguer ce problème. Savez-vous ce qui pourrait être faux? Est-ce que cela fonctionne pour vous sans problème? J'utilise macOS 10.12. Et enfin, dans le cas où je ne serais pas en mesure de résoudre ce problème, existe-t-il d'autres méthodes que vous recommanderiez pour vous connecter à PostgreSQL (avec des fournisseurs de type)?

+0

essayer nom d'utilisateur au lieu de l'ID utilisateur selon http://fsprojects.github.io/SQLProvider/core/postgresql.html –

+0

Les deux versions ne fonctionnent pas, j'ai essayé "Username" au lieu de User Id, même résultat. – mateuszlewko

+1

Je voudrais également essayer npgsql 3.1 comme dans la réponse ci-dessous, a eu quelques problèmes avec 3.2 sur les fenêtres ainsi. Sans compter les énormes téléchargements de dépendance de base de .net, mais au moins paket peut nettoyer cela. – s952163

Répondre

4

Le message d'erreur indique clairement qu'une exception a été levée à partir de l'initialiseur de type pour Npgsql.Counters - il s'agit du nouveau support de Npgsql 3.2 pour les compteurs de performance Windows.

Malheureusement, il semble qu'il y ait plusieurs problèmes avec les compteurs de performance dans divers scénarios (voir #1447 et #1435). Pour cette raison, la version 3.2.2 (à paraître cette semaine) ne les utilisera pas par défaut.

Pouvez-vous confirmer que vous utilisez 3.2.1 (et non 3.2.0), car une correction partielle a été introduite? Si vous utilisez 3.2.1 et obtenez cette exception, vous devrez attendre quelques jours pour 3.2.0, et utiliser 3.1.10 entre-temps, où l'exception ne sera pas levée.

+1

La version 3.1.10 se compile sans problèmes, mais je n'obtiens aucune auto-complétion ou types de SQLProvider. – mateuszlewko

+1

C'est un problème différent ... Je n'ai aucune idée de la façon dont F # SQLProvider fait sa magie - selon sa page de documentation, il semble que Npgsql est entièrement pris en charge. Il serait bon de vérifier avec un autre fournisseur (SQLServer/Sqlite) pour s'assurer que les choses fonctionnent comme vous les attendez aussi. Si vous pensez qu'il y a un problème spécifique à Npgsql, vous pouvez ouvrir un problème sur le repo Nithsql github. –