Cou*_*xer 7 python sql postgresql
我在Windows XP下运行ActiveState的ActivePython 2.6.5.12和PostgreSQL 9.0 Beta 1.
如果我创建一个带有大写首字母的表(即Books),当我运行select语句时,psycopg2会返回"Programming Error:relation"书籍"不存在"错误消息:execute("SELECT * FROM Books")
.如果我运行,则会返回相同的错误:execute("SELECT * FROM books")
.但是,如果我将表更改为小写的第一个名称(即书籍),则上述任一语句都可以.
表名是否应该具有小写的名字?这是设置或功能还是错误?我错过了一些明显的东西吗
要添加到另一个答案,Postresql关于标识符(表名和列名)的大小写的行为是:
这不仅适用于查询,也适用于模式操作; 特别是:表创建.
如果您想编写便携式应用程序,建议您始终引用特定名称或从不引用它
发布的问题可能是因为表和列名称在创建时被引用(因此,它们未转换为小写).因此,现在必须在所有查询中引用它们(并区分大小写).
通常,所有工作都按预期进行.
db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx; -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer); -- will be left untouched
CREATE TABLE
db=# select * from xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx"; -- ok
id
----
(0 rows)
db=# \dt *xx*
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx | table | postgres
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9113 次 |
最近记录: |