问题标签 [haskell-persistent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
261 浏览

sql - 在 Haskell/Persistent 中使用没有 ID 列的 SQL 表

我想使用这个简化的模式将现有数据库与Persistent一起使用:

entities表有一id列,这很好。但是,该entity_links表没有一个,我不想添加一个。相反,它具有主键(source_id, target_id)。每当我想插入一个EntityLink时,我都会收到此运行时错误:

这是我EntityLink在代码中插入 an 的方法,给定有效的sourceIdand targetId

如何id为类型禁用 Persistent 中的列EntityLink

0 投票
1 回答
246 浏览

haskell - 使用 Esqueleto 和 Template Haskell 动态构建 SQL 查询?

我正在编写一个带有 Yesod 和 Persistent 的 webapp。我有一个带有多个表的 SQL 数据库,其中包含我的“项目”的特征。我有一个主表和与 id 链接的具有多个值的附加表的选项。

用户应该能够选择他想要过滤的那些特征并指定过滤值。如果用户过滤操作系统,SQL-Query 的许可证和编码将如下所示:

但我不想总是加入所有表,因为当有很多表但用户只过滤少数表时,这对性能非常不利。但我也不想为每个可查询功能组合编写一个查询,因为这意味着编写 N² 大部分相同的查询。

'on' 和 'where' 子句可以根据我们是否要过滤而动态完成。但是连接在 Lambda 函数的参数范围内。我发现没有办法建立这个依赖于外部变量。

所以我认为 Template Haskell 可能会成功……我开始学习 TH 并将查询的核心转换为 TH。但是现在我被卡住了,不确定 TH 是否可以帮助我以及它是否是正确的方法?

所以这是我使用 Template Haskell 的进展:

所以我希望你能得到帮助:

  • 我可以/应该使用 Template Haskell 来做到这一点吗?
  • 如果是这样:我怎样才能用参数调用函数 foo ?
  • 如果不是:什么是正确的解决方案?
0 投票
1 回答
67 浏览

haskell - 为我的模型获取持久的字段定义

给定这样的持久模型定义:

我正在寻找一种方法来获取此模型的字段定义。FieldDef看起来很有前途的数据类型,但是持久化不生成getPersonFields :: [FieldDef]函数,那怎么办呢?

如果这是一个 XY 问题 - 这是背景:我想返回某种元数据以防 json 解析错误。如果我尝试发布一个新人但 json 错误,我想回复如下内容:

0 投票
0 回答
53 浏览

postgresql - Yesod/Persistent 不关闭数据库连接

我有一个使用 Yesod 和 Persistent 的网络应用程序。我正在使用默认的脚手架Foundation.hsApplication.hs. 我编写了一个处理本地 JSON 文件的函数,然后为 JSON 文件中的每个项目将一行插入到几个表中。所以它将总共执行 1000 多次插入。

在 GHCI 中运行该函数,它成功保存了一些行,然后出现以下错误:

libpq: failed (FATAL: sorry, too many clients already)

使用 postgres 查询:

select * from pg_stat_activity where datname = 'mydb-name'

我可以看到我的应用程序创建了 100 个空闲连接并且没有关闭。然后我需要终止这些连接才能做任何事情。

INSERT当查询完成时,不应该持久关闭这些连接吗?我需要做些什么不同的事情?

0 投票
1 回答
553 浏览

haskell - Select list from list of IDs using persistent

In my application I need to be able to write a query that takes a list of IDs and returns a list of each of those records.

From what I can tell from the yesod persistent page I could do something like

Which I believe would return a list containing user 1, 2 and 3 but I can't work out how I would write this query when I don't know the list or how long it will be at compile time.

How would I go about selecting a list of records using a list of IDs in Haskell persistent.

0 投票
0 回答
64 浏览

sqlite - Yesod 具有数据库访问权限的硬编码身份验证

我实现了一个类似于此处描述的 Yesod 身份验证系统,通过查找硬编码在列表中的用户名和密码可以正常工作。

我现在尝试通过修改lookupUservalidPassword函数来修改此行为以在数据库中查找用户名和密码。对于初学者,只有lookupUser

但是我收到以下我不明白的错误:

runSqliteselectFirst的签名:

0 投票
1 回答
103 浏览

haskell - 持久更新插入不编译

我正在尝试使用 PostgreSQL 在 Persistent 中做一些看起来应该很简单的事情:给定一个Attendance记录列表,用相同的唯一键覆盖任何现有行,或者如果它们不存在则插入。以下是类型:

我没有钥匙,所以我不能使用repsert,但我认为upsert这是我需要的。对我来说,文档upsert看起来有点模糊:如果记录存在并且我将更新留空,我知道它将保留实体原样。但这并不等同于 的行为repsert,正如所声称的那样,是吗?它也没有说明不存在唯一性约束时会发生什么。

我尝试的是

但这会导致我不太了解的错误:

知道是什么导致了这个错误吗?upsertBy也是一样的。我已经在同一个文件中导入了 Esqueleto,但是hiding ((=.)),所以它应该是纯持久的。

0 投票
1 回答
408 浏览

haskell - 从实体记录中获取 id

我有一个Entity record,具体来说Entity User,我需要将用户在数据库中的 ID 提取为Int.

从阅读文档来看,这里似乎entityKey很有用,但我不太确定我将如何Int摆脱困境。

0 投票
1 回答
118 浏览

haskell - 如何将持久模型中的字段用作路由文件中的路径片段?

我有一个像这样的持久模型:

我想在我的 Yesodroutes文件中使用组织名称,如下所示:

使用OrganizationNameor UniqueOrganizationNamethere 给我这个错误:

我可以使用新类型作为解决方法,只是想知道这是否有必要。

我想缺少PathPiece实例是一个问题,但如果只是这样,那么错误将是No instance for (PathPiece ...).

使用OrganizationNameUniqueOrganizationName将没问题。

0 投票
1 回答
136 浏览

haskell - 如何存储任何一个(密钥 a)(密钥 b)?

我有以下模型:

Sharing实体中,我想存储UserIdGroupId区分它们。简单地使用Either不起作用:

  • 不在范围内:类型构造函数或类“UserId”
  • 不在范围内:类型构造函数或类“GroupId”

添加新的 sum 类型也不起作用:

  • 不在范围内:类型构造函数或类“SharingIdType”

移动SharingIdType到另一个模块是不可能的,因为它使用UserIdGroupId类型。我看到的唯一方法是为每种共享类型创建一个实体,例如UserSharing/ GroupSharing

除此之外,如何解决这个问题?