Postgresql 如何为纯SQL中的现有索引获取完整的CREATEINDEX子句?
我已经写了一个简单的脚本,每周重新索引一次我们的PG数据库。它有一个简单的逻辑:Postgresql 如何为纯SQL中的现有索引获取完整的CREATEINDEX子句?,postgresql,Postgresql,我已经写了一个简单的脚本,每周重新索引一次我们的PG数据库。它有一个简单的逻辑: 按膨胀字节数获取前10个索引 从hashmap变量(索引名->创建子句)查找创建索引子句 如果没有-记录到stderr并转到下一个索引 同时创建新索引 同时删除旧索引 重命名新索引 作为一个懒惰的开发人员,我不喜欢这种必须不断更新hashmap的概念。(另一方面,我在做这项工作时发现了两个效率低下的指数。) PGU索引似乎信息量很大,有没有办法从中重建CREATEINDEX子句 获取列列表很容易,但我们使用
- 按膨胀字节数获取前10个索引
- 从hashmap变量(索引名->创建子句)查找创建索引子句
- 如果没有-记录到stderr并转到下一个索引
- 同时创建新索引
- 同时删除旧索引
- 重命名新索引
重要的是要确保我们将得到与最初用于创建索引完全相同的子句。是的,有一个内置函数用于此目的 e、 g:
真遗憾,没有一个等价的函数来定义一个表(
pg_get_tabledef()
将非常有用)@a_horse_与_no_name是的,我同意。非常强烈。我理解将pg_dump
作为客户端工具的逻辑(重新降级),但是缺少服务器端DDL导出作为选项是非常令人沮丧的。哇!很高兴它真的存在。即使知道这个函数的描述,我也不能轻易地用谷歌搜索它:)@a_horse_与_no_name不幸的是pg_dump
是意大利面条,而SPI(服务器端相当于libpq)还不足以像libpq
那样使pg_dump
的内脏变成一个可以在服务器端或客户端使用的库。
regress=> SELECT pg_get_indexdef('demo_pkey'::regclass);
pg_get_indexdef
--------------------------------------------------------
CREATE UNIQUE INDEX demo_pkey ON demo USING btree (id)
(1 row)