postgresql 表名(模糊匹配)批量删除

那天分表的时候建错了,应该是按天分表,结果搞错需求搞成按小时分表了……但是表建完了,删除如果逐条删除会很麻烦,所以就需要根据表名模糊查找,之后批量删除。代码如下:

DO $$
DECLARE
d varchar(128);
BEGIN
	FOR d IN select 'drop table '||schemaname||'.'||tablename||';' from pg_tables where schemaname||'.'||tablename like '%public.t_audit_2019%' 
	loop
	EXECUTE d;
	END LOOP;
END;
$$

简单来说就是根据表名模糊查找得到一个结果集,然后根据结果集进行循环执行drop语句。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 中,使用 LIKE 和 ILIKE 进行模糊匹配时,如果不采取特殊的措施,它们是不会使用索引的,而是会进行全扫描,导致查询效率较低。但是,可以通过创建索引和使用特殊的匹配方式来优化模糊匹配查询的性能。 1. 创建索引 可以创建 B-tree 索引来优化 LIKE 和 ILIKE 查询的性能。例如,对于一个名为 name 的列,可以使用如下 SQL 语句创建一个 B-tree 索引: ``` CREATE INDEX idx_name ON tablename USING btree (name); ``` 2. 使用“前缀匹配” “前缀匹配”是指在查询时只匹配目标字符串的开头部分,这样可以大大减少匹配的次数。例如,如果要查询名字以“John”开头的用户,可以将查询条件改为: ``` SELECT * FROM tablename WHERE name LIKE 'John%'; ``` 这样,只有以“John”开头的字符串才会被匹配,不符合条件的字符串就不会被匹配,可以大大减少匹配的次数。 3. 使用 pg_trgm 扩展 pg_trgm 是 PostgreSQL 的一个扩展,它提供了一种基于 trigram 的模糊匹配算法,可以用来优化 LIKE 和 ILIKE 查询的性能。它将字符串拆分成三字母组合,并将其存储在索引中,这样在查询时只需要比较三字母组合的匹配程度,而不是整个字符串的匹配程度,可以大大提高查询效率。使用 pg_trgm 扩展,需要先在数据库中创建扩展: ``` CREATE EXTENSION IF NOT EXISTS pg_trgm; ``` 然后可以使用如下语句创建一个 trigram 索引: ``` CREATE INDEX idx_name_trgm ON tablename USING gin (name gin_trgm_ops); ``` 最后,在查询时需要使用 pg_trgm 提供的函数进行模糊匹配,例如: ``` SELECT * FROM tablename WHERE name % 'John'; ``` 其中,“%”示使用 trigram 算法进行模糊匹配

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值