Rah*_*wda 10 sql database postgresql postgis
我在使用PostgreSQL 9.3时遇到了这个奇怪的问题,这些表是使用qoutes创建的.例如,如果我使用qoutes创建一个表:
create table "TEST" ("Col1" bigint);
Run Code Online (Sandbox Code Playgroud)
正确创建表,我可以看到在pgAdminIII的SQL窗格中查看时会保留引号.但是当我查询数据库以找到所有可用表的列表(使用下面的查询)时,我看到结果不包含表名周围的引号.
select table_schema, table_name from information_schema.tables where not table_schema='pg_catalog' and not table_schema='information_schema';
Run Code Online (Sandbox Code Playgroud)
由于表是使用引号创建的,因此我不能直接使用从上面的查询返回的表名,因为它没有引用,并在标题中发布错误.
我可以尝试在所有查询中用引号括起表名,但我不确定它是否会一直有效.我正在寻找一种方法来获取在结果中引用引号的表名列表.
我对列名也有同样的问题,但我希望如果我能找到表名问题的解决方案,类似的解决方案也适用于列名.
Han*_*nig 23
你有两个选择: - 没有引号:那么一切都将自动为小写且不区分大小写 - 带引号:从现在开始,所有内容都区分大小写.
我强烈建议不要使用引号并使PostgreSQL表现为非区分大小写.它让生活变得如此简单.一旦你进入引用,你必须随时使用它,因为PostgreSQL将开始非常精确.
一些例子:
TEST = test <-- non case sensitive
"Test" <> Test <-- first is precise, second one is turned to lower case
"Test" = "Test" <-- will work
"test" = TEST <-- should work; but you are just lucky.
Run Code Online (Sandbox Code Playgroud)
真的试图不惜一切代价避免这种诡计.保留7位ascii作为对象名称.
小智 9
当使用 npg 包作为数据存储 ORM 时,您期望 ORM 框架(在我们的例子中为实体框架)生成 sql 语句,您可能会遇到 PostgreSQL 异常:关系“表名称”不存在
要么未创建表,要么生成的 SQL 语句缺少某些内容。尝试使用 Visual Studio 进行调试,您将看到架构名称不领先于表名称
SELECT "ID", "Name", "CreatedBy", "CreatedDate"
FROM "TestTable";
Run Code Online (Sandbox Code Playgroud)
而 PostgreSQL 需要模式名称。解决方法是在 DBContext 类中重写 OnModelCreating 方法并添加modelBuilder.HasDefaultSchema("SchemaName");
并执行基本构造函数,该构造函数应如下所示
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("PartyDataManager");
base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
就我而言。数据库中的表必须小写...更改名称 dataTable 做数据表帮助
归档时间: |
|
查看次数: |
42789 次 |
最近记录: |