Để nhận OID bảng, hãy truyền đến loại mã định danh đối tượng regclass
(trong khi được kết nối với cùng một DB):
SELECT 'mytbl'::regclass::oid;
Thao tác này tìm bảng đầu tiên (hoặc chế độ xem, v.v.) có tên đã cho dọc theo search_path
hoặc đưa ra một ngoại lệ nếu không tìm thấy.
Schema-đủ điều kiện cho tên bảng để loại bỏ sự phụ thuộc vào đường dẫn tìm kiếm:
SELECT 'myschema.mytbl'::regclass::oid;
Trong Postgres 9.4 trở lên, bạn cũng có thể sử dụng to_regclass('myschema.mytbl')
, điều này không tạo ra ngoại lệ nếu không tìm thấy bảng:
- Cách kiểm tra xem một bảng có tồn tại trong một lược đồ nhất định không
Sau đó, bạn chỉ cần truy vấn bảng danh mục pg_attribute
về sự tồn tại của cột:
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)