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

5 cách để kiểm tra xem một bảng có tồn tại trong PostgreSQL hay không

Dưới đây là năm cách để kiểm tra xem một bảng có tồn tại trong cơ sở dữ liệu PostgreSQL hay không.

pg_tables Xem

pg_tables dạng xem chứa thông tin về mỗi bảng trong cơ sở dữ liệu.

Chúng tôi có thể sử dụng nó để kiểm tra xem một bảng nhất định có tồn tại trong cơ sở dữ liệu hiện tại hay không:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 'actor'
    );

Kết quả:

True

Trong trường hợp này, tôi nhận được True , có nghĩa là bảng tồn tại (và tôi có quyền truy cập vào nó).

Tùy thuộc vào cấu hình của bạn, bạn có thể nhận được t / f thay vì True / False .

information_schema.tables Xem

information_schema.tables dạng xem chứa tất cả các bảng và dạng xem được xác định trong cơ sở dữ liệu hiện tại mà người dùng hiện tại có quyền truy cập.

Chúng tôi có thể sử dụng nó để kiểm tra xem một bảng nhất định có tồn tại hay không và chúng tôi có quyền truy cập vào nó hay không:

SELECT EXISTS (
    SELECT FROM 
        information_schema.tables 
    WHERE 
        table_schema LIKE 'public' AND 
        table_type LIKE 'BASE TABLE' AND
        table_name = 'actor'
    );

Kết quả:

True

Một cách khác để làm điều đó là đếm:

SELECT 
    COUNT(table_name)
FROM 
    information_schema.tables 
WHERE 
    table_schema LIKE 'public' AND 
    table_type LIKE 'BASE TABLE' AND
	table_name = 'actor';

Kết quả:

1

table_type có thể là một trong những điều sau:

BASE TABLE Bảng cơ sở liên tục (bảng bình thường)
VIEW Xem
FOREIGN Bảng ngoại
LOCAL TEMPORARY Bảng tạm thời

Bạn có thể bỏ qua table_type từ bộ lọc của bạn nếu bạn muốn kiểm tra xem tên có tồn tại trên tất cả các loại hay không.

Danh mục hệ thống

Danh mục hệ thống là nơi RDBMS lưu trữ siêu dữ liệu lược đồ, chẳng hạn như thông tin về các bảng và cột cũng như thông tin kế toán nội bộ.

Trong Postgres, danh mục hệ thống là các bảng thông thường.

Chúng tôi có thể sử dụng hai trong số chúng để kiểm tra xem một bảng nhất định có tồn tại hay không:

SELECT EXISTS (
    SELECT FROM 
        pg_catalog.pg_class c
    JOIN 
        pg_catalog.pg_namespace n ON 
        n.oid = c.relnamespace
    WHERE  
        n.nspname = 'public' AND 
        c.relname = 'actor' AND 
        c.relkind = 'r'
    );

Kết quả:

True

relkind trong tổng số r dành cho bảng thông thường .

Bạn có thể xóa relkind lọc hoàn toàn nếu bạn chỉ muốn kiểm tra xem một đối tượng đã có tên mà bạn muốn đặt cho bảng hay chưa.

Hoặc bạn có thể lọc theo các loại khác.

Dưới đây là các tùy chọn:

r bảng thông thường
i chỉ mục
S trình tự
t bảng TOAST
v lượt xem
m chế độ xem cụ thể hóa
c loại kết hợp
f bảng ngoại
p bảng được phân vùng
I chỉ mục được phân vùng

to_regclass() Chức năng

to_regclass() hàm dịch tên quan hệ dạng văn bản sang OID của nó. Nếu tên tồn tại, OID sẽ được trả về.

Ví dụ:

SELECT to_regclass('public.actor');

Kết quả:

actor

Nếu bảng không tồn tại, NULL được trả về.

Truyền tới regclass

Cũng có thể truyền tên bảng để nhập regclass :

SELECT 'public.actor'::regclass

Kết quả:

actor

Tuy nhiên, nếu bảng không tồn tại, thì sẽ xảy ra lỗi.

Kiểm tra xem một bảng đã tồn tại chưa trước khi tạo nó

Nếu bạn cần tạo bảng nếu nó không tồn tại, bạn có thể sử dụng IF NOT EXISTS mệnh đề của CREATE TABLE tuyên bố. Nếu bảng không tồn tại, nó sẽ được tạo. Nếu nó đã tồn tại, nó sẽ không được tạo.

Hãy xem Chỉ tạo bảng nếu nó không tồn tại trong PostgreSQL để làm ví dụ.


  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 để sử dụng kiểu dữ liệu Postgres JSONB với JPA?

  2. PostgreSQL:Xóa thuộc tính khỏi cột JSON

  3. Thực hiện truy vấn hàng giờ hoạt động này trong PostgreSQL

  4. Đặt giá trị trong phần phụ thuộc của biểu đồ Helm

  5. Cách lấy thời gian hiện tại trong PostgreSQL