Để thêm vào câu trả lời khác, hành vi của Postresql về tính phân biệt chữ hoa chữ thường của số nhận dạng (tên bảng và tên cột) là:
- Nếu tên không được trích dẫn, nó sẽ được chuyển đổi thành chữ thường . Nếu không, nó vẫn được giữ nguyên.
- Sau đó, đối sánh phân biệt chữ hoa chữ thường đang cố gắng.
Điều này không chỉ áp dụng cho các truy vấn, mà còn cho thao tác trên lược đồ; cụ thể là:tạo bảng.
Quy tắc vàng là nhất quán:
Nếu bạn muốn viết các ứng dụng di động, bạn nên luôn trích dẫn một tên cụ thể hoặc không bao giờ trích dẫn nó
Vấn đề đã đăng phát sinh, có thể là do tên các bảng và cột đã được trích dẫn tại thời điểm tạo (do đó, chúng không được chuyển đổi thành chữ thường). Vì vậy, bây giờ chúng phải được trích dẫn (và phân biệt chữ hoa chữ thường) trong tất cả các truy vấn.
Thông thường, tất cả đều hoạt động như mong đợi.
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