Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何为纯SQL中的现有索引获取完整的CREATEINDEX子句?_Postgresql - Fatal编程技术网

Postgresql 如何为纯SQL中的现有索引获取完整的CREATEINDEX子句?

Postgresql 如何为纯SQL中的现有索引获取完整的CREATEINDEX子句?,postgresql,Postgresql,我已经写了一个简单的脚本,每周重新索引一次我们的PG数据库。它有一个简单的逻辑: 按膨胀字节数获取前10个索引 从hashmap变量(索引名->创建子句)查找创建索引子句 如果没有-记录到stderr并转到下一个索引 同时创建新索引 同时删除旧索引 重命名新索引 作为一个懒惰的开发人员,我不喜欢这种必须不断更新hashmap的概念。(另一方面,我在做这项工作时发现了两个效率低下的指数。) PGU索引似乎信息量很大,有没有办法从中重建CREATEINDEX子句 获取列列表很容易,但我们使用

我已经写了一个简单的脚本,每周重新索引一次我们的PG数据库。它有一个简单的逻辑:

  • 按膨胀字节数获取前10个索引
  • 从hashmap变量(索引名->创建子句)查找创建索引子句
    • 如果没有-记录到stderr并转到下一个索引
  • 同时创建新索引
  • 同时删除旧索引
  • 重命名新索引
作为一个懒惰的开发人员,我不喜欢这种必须不断更新hashmap的概念。(另一方面,我在做这项工作时发现了两个效率低下的指数。)

PGU索引似乎信息量很大,有没有办法从中重建CREATEINDEX子句

获取列列表很容易,但我们使用不同的索引类型、字段的不同OPClass、部分索引。。。谁知道呢。
重要的是要确保我们将得到与最初用于创建索引完全相同的子句。

是的,有一个内置函数用于此目的

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)