使用PostgreSQL 9.3使用使用qoutes创建的表时,我遇到了一个奇怪的问题。例如,如果我使用qoutes创建一个表:
create table "TEST" ("Col1" bigint);
表是正确创建的,我可以看到,当在pgAdminIII的SQL窗格中查看它时,引号将被保留。但是,当我查询DB以查找所有可用表的列表(使用下面的查询)时,我看到结果不包含表名周围的引号。
select table_schema, table_name from information_schema.tables where not table_schema='pg_catalog' and not table_schema='information_schema';
因为表是用引号创建的,所以我不能直接使用从上面的查询返回的表名,因为它没有引用,并将错误抛出在标题中。
我可以尝试在所有查询中用引号包围表名,但我不确定它是否始终有效。我正在寻找一种获取表名列表的方法,这些表名在结果中引用引号。
对于列名,我也有同样的问题,但我希望如果我能够找到表名问题的解决方案,类似的解决方案也适用于列名。
发布于 2014-10-29 13:18:52
你有两个选择:-没有引号:那么所有东西都会自动地变成小写和不区分大小写的--带有引号:从现在开始,一切都是区分大小写的。
我强烈建议不要使用引号,并使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.
真的要不惜任何代价避免这种诡计。使用7位ascii获取对象名称。
发布于 2019-02-16 18:36:42
当使用npg包作为您的数据存储ORM时,您期望ORM框架(在本例中是实体框架)生成PostgreSQL语句,您可能会遇到一个异常--不存在“表名”关系
要么没有创建表,要么生成的SQL语句丢失了一些内容。尝试使用visual studio进行调试,您将看到架构名称不会导致表名。
SELECT "ID", "Name", "CreatedBy", "CreatedDate"
FROM "TestTable";
而PostgreSQL正在等待模式名称。解析在DBContext类中覆盖OnModelCreating方法,并添加modelBuilder.HasDefaultSchema("SchemaName");
并执行基本构造函数,如下所示
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("PartyDataManager");
base.OnModelCreating(modelBuilder);
}
发布于 2021-02-23 09:29:22
在我的案子里。数据库中的表必须是lowercase...change名称dataTable do datatable帮助
https://stackoverflow.com/questions/26631205
复制相似问题