如何从命令行重新索引 Postgres 9.1.3

Posted

技术标签:

【中文标题】如何从命令行重新索引 Postgres 9.1.3【英文标题】:How to reindex Postgres 9.1.3 from the command line 【发布时间】:2015-07-01 14:27:27 【问题描述】:

我对我管理的 Postgres 数据库中的一些表进行了一系列删除和更新。建议在一系列删除之后安排重新索引,以解决 10 分钟的下一步更新无限冻结(因为它是随机冻结的)。DOS 指令提供了以下内容:

Usage:
  reindexdb [OPTION]... [DBNAME]

Options:
  -a, --all                 reindex all databases
  -d, --dbname=DBNAME       database to reindex
  -e, --echo                show the commands being sent to the server
  -i, --index=INDEX         recreate specific index only
  -q, --quiet               don't write any messages
  -s, --system              reindex system catalogs
  -t, --table=TABLE         reindex specific table only
  --help                    show this help, then exit
  --version                 output version information, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as
  -w, --no-password         never prompt for password
  -W, --password            force password prompt

我们必须使用 9.1.3 版本,因为这是公司标准。 我已经尝试了所有我能想到的选项,但它不需要命令来重新索引:

reindexdb.exe -U username=MyUserName -W MyPassword -t table=MyDatabase.MyTable

我也试过

reindexdb.exe -U MyUserName -W MyPassword -t MyDatabase.MyTable

reindexdb.exe -U MyUserName -W MyPassword -t MyTable -d MyDatabase

...但它们都以错误结束:

reindexdb: too many command-line arguments (first is "-t")

有没有人有一个工作示例可以阐明正确的语法是什么?

【问题讨论】:

使用密码文件,在 Windows 上:%APPDATA%\postgresql\pgpass.conf。详情:***.com/a/15593100/939860 【参考方案1】:

从您的参数中删除MyPassword,并在 Postgres 提示您时输入它。

-W 只是让 Postgres 提示输入密码;它本身不接受密码。你不应该在命令行上指定密码,因为它通常会被记录。

如果您需要以非交互方式运行它,请设置PGPASSWORD environment variable 或创建pgpass file。

【讨论】:

如果这是在计划任务批处理文件中,我将如何考虑在非交互式环境中输入密码?【参考方案2】:

做到了:

reindexdb.exe -d MyDatabase -U postgres -t MyTable

正如@Colonel 32 和@Erwin Brandstetter 所指出的,可以通过 %APPDATA%\postgresql\pgpass.conf 完全删除密码

【讨论】:

【参考方案3】:

可以通过在命令后添加关键字 FORCE 来强制执行这些操作

重新创建单个索引,myindex:

REINDEX INDEX myindex

重新创建表 mytable 中的所有索引:

REINDEX TABLE mytable

在公共架构中重新创建所有索引:

REINDEX SCHEMA public

重新创建数据库 postgres 中的所有索引:

REINDEX DATABASE postgres

在数据库 postgres 中重新创建系统目录上的所有索引:

REINDEX SYSTEM postgres

link

【讨论】:

以上是关于如何从命令行重新索引 Postgres 9.1.3的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个访问受限、没有插入更新但可以执行重新索引和备份等维护任务的 postgres 角色?

从 grep 输出中按索引获取行

postgres:从命令行在数据库中创建表

如何判断 Postgres 表何时聚集以及使用了哪些索引

在 SearchKick 的命令行中仅重新索引单个模型

如何使用命令行备份 postgres 数据库