PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Psycopg2 không thích các tên bảng bắt đầu bằng chữ thường

Để 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để trả về kết quả của một SELECT bên trong một hàm trong PostgreSQL?

  2. Ưu tiên dựa trên thời gian trong Truy vấn Bản ghi Hoạt động

  3. Thay đổi trường Enum bằng Alembic

  4. Cách tự động triển khai cơ sở dữ liệu PostgreSQL

  5. Tiếp tục giao dịch sau lỗi vi phạm khóa chính