📜  检查表是否存在 postgresql (1)

📅  最后修改于: 2023-12-03 15:10:56.388000             🧑  作者: Mango

检查表是否存在 Postgresql

当我们在开发中需要查询或操作某个表时,有可能会遇到表不存在的情况。为了避免这种情况,可以使用Postgresql内置的函数来检查表是否存在。

语法
SELECT EXISTS (
   SELECT 1
   FROM   information_schema.tables 
   WHERE  table_schema = 'schema_name'
   AND    table_name = 'table_name'
);
  • schema_name: 表所在的schema名称
  • table_name: 表名称

该语法会返回一个布尔类型的值,true表示表存在,false表示表不存在。

示例

假设我们有一个表名为users,它所在的schema为public,那么我们可以使用以下语句来检查表是否存在:

SELECT EXISTS (
   SELECT 1
   FROM   information_schema.tables 
   WHERE  table_schema = 'public'
   AND    table_name = 'users'
);

如果表存在,则会返回true,否则会返回false

在函数中使用

为了方便在程序中使用,我们可以将检查表是否存在的语句封装成一个函数:

CREATE OR REPLACE FUNCTION table_exists(table_schema TEXT, table_name TEXT)
RETURNS BOOLEAN AS $$
BEGIN
    RETURN EXISTS(
        SELECT 1
        FROM information_schema.tables
        WHERE table_schema = $1
        AND table_name = $2
    );
END;
$$ LANGUAGE plpgsql;

该函数接受两个参数:表所在的schema名称和表名称。它会返回一个布尔类型的值,true表示表存在,false表示不存在。

在程序中使用该函数,可以方便地检查表是否存在:

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass", host="localhost", port="5432")

cur = conn.cursor()

table_schema = 'public'
table_name = 'users'

if cur.execute("SELECT table_exists(%s, %s)", (table_schema, table_name)) and cur.fetchone()[0]:
    print('Table exists')
else:
    print('Table does not exist')

以上代码会输出Table existsTable does not exist

总结

通过使用Postgresql内置的函数和封装成自定义函数,我们可以轻松地检查表是否存在。在开发中,合理使用这些技巧可以提高开发效率和程序的健壮性。