首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用postgresql创建数据库连接时的GHCI段-简单

用postgresql创建数据库连接时的GHCI段-简单
EN

Stack Overflow用户
提问于 2016-09-11 20:37:31
回答 1查看 355关注 0票数 6

当我试图用postgresql-simple在GHCI中创建数据库连接时,我得到了一个GHCI段错误。

我正在使用GHC 8.0.1,OSX 10.11.16。我没有一个系统GHC,只有一个通过堆栈安装。

如果在我的项目中执行以下操作,则会出现分段错误:

代码语言:javascript
复制
$ stack ghci
Loaded GHCi configuration from /private/var/folders/wb/vvtxjd7n2qz02f571yjyr9j40000gs/T/ghci62972/ghci-script
gchi> :set -XOverloadedStrings
gchi> import Database.PostgreSQL.Simple
gchi> let connstr = "host=localhost port=5432 user=myusername password=mypass dbname=local"
gchi> conn <- connectPostgreSQL connstr
zsh: segmentation fault  stack ghci

我认为它可能值得一看它提到的那个文件,下面是内容:

代码语言:javascript
复制
> cat /private/var/folders/wb/vvtxjd7n2qz02f571yjyr9j40000gs/T/ghci62972/ghci-script
:load "/Users/erewok/projects/haskell/simpleservantblog/app/Main.hs" "Api" "Api.Post" "Api.User" "Config" "Html.Home" "Models.Author" "Models.Post"
:module + Api Api.Post Api.User Config Html.Home Models.Author Models.Post

它是从项目中加载的所有模块的列表(它编译并运行良好)。

以下是从启动ghci到seg故障的全部输出:

代码语言:javascript
复制
$ stack ghci
The following GHC options are incompatible with GHCi and have not been passed to it: -threaded
Using main module: 1. Package `simpleservantblog' component exe:simpleservantblog-exe with main-is file: /Users/erewok/projects/haskell/simpleservantblog/app/Main.hs
Configuring GHCi with the following packages: simpleservantblog
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /Users/erewok/.ghci
[1 of 8] Compiling Models.Author    ( /Users/erewok/projects/haskell/simpleservantblog/src/Models/Author.hs, interpreted )
[2 of 8] Compiling Models.Post      ( /Users/erewok/projects/haskell/simpleservantblog/src/Models/Post.hs, interpreted )
[3 of 8] Compiling Html.Home        ( /Users/erewok/projects/haskell/simpleservantblog/src/Html/Home.hs, interpreted )
[4 of 8] Compiling Api.User         ( /Users/erewok/projects/haskell/simpleservantblog/src/Api/User.hs, interpreted )
[5 of 8] Compiling Api.Post         ( /Users/erewok/projects/haskell/simpleservantblog/src/Api/Post.hs, interpreted )
[6 of 8] Compiling Config           ( /Users/erewok/projects/haskell/simpleservantblog/src/Config.hs, interpreted )
[7 of 8] Compiling Api              ( /Users/erewok/projects/haskell/simpleservantblog/src/Api.hs, interpreted )
[8 of 8] Compiling Main             ( /Users/erewok/projects/haskell/simpleservantblog/app/Main.hs, interpreted )
Ok, modules loaded: Api, Config, Api.Post, Api.User, Html.Home, Models.Post, Models.Author, Main.
Loaded GHCi configuration from /private/var/folders/wb/vvtxjd7n2qz02f571yjyr9j40000gs/T/ghci64266/ghci-script
gchi> :set -XOverloadedStrings
gchi> import Database.PostgreSQL.Simple
gchi> let connstr = "host=localhost port=5432 user=myusername password=mypass dbname=local"
gchi> conn <- connectPostgreSQL connstr
zsh: segmentation fault  stack ghci

更多信息

Postgresql版本: 9.5,使用EnterpriseDB安装程序安装

发布我的stack.yaml的请求(如下所示)让我想起了当试图安装postgresql时遇到的一个问题。这可能是有关联的。

Stack.yaml

代码语言:javascript
复制
# This file was automatically generated by stack init
# For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration/

# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
resolver: nightly-2016-08-25

# Local packages, usually specified by relative directory name
packages:
- '.'
- location:
    git: https://www.github.com/mattjbray/elm-export
    commit: 8868c1f09597f44c2e18e014cd9fbcf8320c3fea
  extra-dep: True
- location:
    git: https://www.github.com/mattjbray/servant-elm
    commit: e13c8def8127ea339e9801d804638854947193e8
  extra-dep: True
# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
extra-deps:
  - wai-make-assets-0.1.1

# Override default flag values for local packages and extra-deps
flags: {}

# Extra package databases containing global packages
extra-package-dbs: []

# Control whether we use the GHC we find on the path
# system-ghc: true


# Extra directories used by stack for building
# extra-include-dirs: [/path/to/dir]
extra-lib-dirs: [/usr/local/opt/libiconv/lib, /usr/local/lib, /usr/lib]

用解析器lts-6.17对GHC7.10.3进行分段故障

代码语言:javascript
复制
gchi> conn <- connectPostgreSQL connstr
zsh: segmentation fault  stack ghci --resolver lts-6.17

--我有的想法

我认为我使用的postgresql-libpq版本是用为PostgreSQL9.4编译的libiconv.2.dylib构建的,但我试图连接的数据库实际上是PostgreSQL9.5。这可能是我提出问题的原因。

--我做的一件事,受到这个想法的启发,

以下是我为进一步调试和/或修复这一问题而采取的一些步骤。我首先将PostgreSQL9.5 *dylib文件链接到我的/usr/local/lib目录中,以替换与PostgreSQL9.4版本链接的旧文件。

代码语言:javascript
复制
$ cd /usr/local/lib
$ sudo ln -s -f /Library/PostgreSQL/9.5/lib/*dylib .

之后,我试图强制stack以这种方式重新构建postgresql-libpqpostgresql-simple

代码语言:javascript
复制
  $ stack exec -- ghc-pkg unregister --force postgresql-simple
  $ stack exec -- ghc-pkg unregister --force postgresql-libpq
  $ rm -rf ~/.stack/precompiled/x86_64-osx/ghc-8.0.1/1.24.0.0/postgresql-libpq-0.9.1.1/
  $  rm -rf ~/.stack/precompiled/x86_64-osx/ghc-8.0.1/1.24.0.0/postgresql-simple-0.5.2.*
  $ stack build

在那一刻,它答应我它将构建和配置已删除的软件包。然而,当我运行上面的代码时,仍然有段错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 21:53:36

在试图为我的问题生成堆栈跟踪时,我发现可以通过以下方式启动ghci:

代码语言:javascript
复制
$ stack ghci --ghci-options -fexternal-interpreter

然后,无论出于什么原因,分段故障都不会出现,一切都按预期进行。我不知道其他人是否会觉得这有用。

在我看来,奇怪的是,在编译和运行代码时,我没有问题。我在GHCI上只有一个问题。

无论如何,在我发现更多或者有人有更好的建议之前,我会继续测试REPL中我想要的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39440416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档