pgsql 删除创建索引_postgresql – 如果索引不存在则创建索引

在PostgreSQL中,索引名称需要在数据库架构内唯一。文章介绍了如何通过查询`pg_class`系统表来检查索引是否存在,从而决定是否创建。在不同PostgreSQL版本中,提供了不同的方法,包括使用`DO`声明或`to_regclass()`函数来避免重复创建索引。Postgres 9.5及更高版本还支持`CREATE INDEX IF NOT EXISTS`语法。
摘要由CSDN通过智能技术生成

PostgreSQL中的索引名称

>索引名称在单个数据库架构中是唯一的.

>索引名称不能与同一模式中的任何其他索引,(外部)表,(物化)视图,序列或用户定义的复合类型相同.

>同一模式中的两个表不能具有相同名称的索引. (逻辑上讲.)

如果您不关心索引的名称,可以让Postgres自动命名它:

CREATE INDEX ON tbl1 (col1)

是(几乎)相同

CREATE INDEX tbl1_col1_idx ON tbl1 USING btree (col1);

除了Postgres将避免命名冲突并自动选择下一个免费名称:

tbl1_col1_idx

tbl1_col1_idx2

tbl1_col1_idx3

...

就试一试吧.但显然你不想创建多个冗余索引.所以盲目地创建一个新的不是一个好主意.

测试存在

Postgres 9.3或更早

一种非常简单的测试方法是将模式限定名称转换为regclass:

SELECT 'myschema.myname'::regclass

如果它抛出异常,则该名称是免费的.

或者,在DO声明中使用的测试相同而不抛出异常:

DO $$

BEGIN

IF NOT EXISTS (

SELECT 1

FROM pg_class c

JOIN pg_namespace n ON n.oid = c.relnamespace

WHERE c.relname = 'my_name'

AND n.nspname = 'myschema' -- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值