如果使用带有postgres的fluentmigrator,它会生成像这样的代码
CREATE TABLE public."Sample"...
因为这个我必须为每个序列使用双引号
SELECT * FROM public.Sample <--- Error
SELECT * FROM public."Sample" <--- OK
我如何关闭双引号?
更多信息说明https://github.com/schambers/fluentmigrator/issues/687
答案 0 :(得分:2)
我自己看过这个问题,问题是FluentMigrator的引号基本上是硬编码的.....根据当前版本。
唯一的方法是自己下载和修改源代码。
它非常好,你需要查看PostgresQuoter.cs类,并覆盖一些基本的引用方法。
我还没有完全修改整个项目,只适用于第一遍,并希望在本周晚些时候完成其余的更改。 如果它不是太hacky我会看到是否不能给你修改文件。
答案 1 :(得分:0)
如果你不是一直使用小写,这真的只是一个问题。 Postgres区分大小写。 Postgresql在没有引用的情况下对标识符不区分大小写(它实际上将它们在内部折叠为小写),并且在引用时区分大小写。使用小写字母是安全的。但是,如果您使用的是camelCase或PascalCase,则意味着您始终需要保持一致:始终或永远不会引用标识符。
重申,如果您使用小写作为约定命名事物,则不会出现双引号问题。如果你使用大写,你会遇到双引号问题。希望这可以帮助。祝你的项目好运。 :)
答案 2 :(得分:0)
如果您想完全消除双引号,则:
从dt = datetime.datetime.fromisoformat(calendar['Start'][i])
hours = dt.hour
PostgresQuoter
通过依赖项注入将其添加到启动
public class NoQuoteQuoter : PostgresQuoter
{
public NoQuoteQuoter(PostgresOptions options) : base(options)
{
}
protected override bool ShouldQuote(string name)
{
return false;
}
}
答案 3 :(得分:0)
我自己也遇到了这个问题,很多其他人都提到过这个问题,但是我想重申这一点,尤其是如果您来自SQL Server,则还要澄清一下。
首先,如果您不混合使用其他数据库,而仅使用PG,则使用EASIEST方式可以解决问题。 不要使用大小写混合!只需将所有内容都变成小写
例如
Create.Table("users")
现在查询时,您可以执行以下任何操作
select * from users
select * from Users
select * from USERS
他们都做同样的事情。
您还需要对列进行此操作。
PG带有引号的原因是它支持必须与外壳完全匹配的带引号的符号
在FluentMigrator中可能存在一个钩子,您可以在其中强制使用小写字母(即,仅使用.ToLower()
所有名称)