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

Tên có phải là một từ khóa đặc biệt trong PostgreSQL không?

Đây là một "tính năng" khó hiểu được biết đến với một chút lịch sử. Cụ thể, bạn có thể tham chiếu đến các bộ giá trị tổng thể từ bảng với tên bảng, sau đó thêm .name sẽ gọi name chức năng trên chúng (tức là nó sẽ được hiểu là select name(t) from t ).

Tại một số thời điểm trong quá trình phát triển PostgreSQL 9, điều này đã được làm sạch một chút. Bạn vẫn có thể thực hiện select t from t rõ ràng để có được hiệu ứng hàng dưới dạng bộ, nhưng bạn không thể áp dụng một hàm theo cách tương tự. Vì vậy, trên PostgreSQL 8.4.9 , cái này:

create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;

tạo ra sự kỳ lạ:

  name   
---------
 (1,foo)
(1 row)

nhưng trên 9.1.1 sản xuất:

ERROR:  column t.name does not exist
LINE 1: select t.name from t;
               ^

như bạn mong đợi.

Vì vậy, để trả lời cụ thể câu hỏi của bạn:name là một kiểu tiêu chuẩn trong PostgreSQL (được sử dụng trong danh mục cho tên bảng, v.v.) và cũng có một số hàm tiêu chuẩn để chuyển đổi mọi thứ thành name loại hình. Nó không thực sự được dành riêng, chỉ là những đối tượng tồn tại được gọi như vậy, cộng với một số cú pháp lịch sử kỳ lạ, đã làm cho mọi thứ trở nên khó hiểu; và điều này đã được các nhà phát triển khắc phục trong các phiên bản gần đây.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trích xuất các tên khóa có giá trị thực từ đối tượng JSONB

  2. Trung bình động trong postgresql

  3. Cách tránh cuộc gọi kích hoạt vòng lặp trong PostgreSQL 9.2.1

  4. Cơ sở dữ liệu PostgreSQL của tôi đã hết dung lượng đĩa

  5. Làm cách nào để truy cập một cột HSTORE bằng thư viện PostgreSQL C (libpq)?