GitXplorerGitXplorer
k

pg_reindex

public
19 stars
1 forks
0 issues

Commits

List of commits on branch master.
Unverified
c4521ea424b0e33ebeb734d30c17d11c83202679

0.1.5

committed 8 years ago
Unverified
2d9a3fde99f6c23ed3b9c02cf70c72deb7ef14d6

Merge pull request #1 from snoblenet/master

kkostya committed 8 years ago
Unverified
100e546246419e7f4b059f6ac3c3dcbb2d9e1334

Update pgre

ssnoblenet committed 8 years ago
Unverified
999ab9edaafe6fe199185e1a6b71b20bfe8c4eb3

Update pgre

ssnoblenet committed 8 years ago
Unverified
fe8ac2943f845053aee6ca2c7f22428b75a32296

Update pgre

ssnoblenet committed 8 years ago
Unverified
a7d82454306676ad0bb14d432d01c8298c20c665

Update pgre

ssnoblenet committed 8 years ago

README

The README file for this repository.

Pg Reindex

Console utility for gracefully rebuild indexes/pkeys for PostgreSQL, with minimal locking in semi-auto mode.

Install:

$ gem install pg_reindex

Using:

export PGRE_CFG=/some/path/database.yml
pgre --help

Database.yml from rails application. User in connection settings should be an owner of relations. And for rebuild pkey, should be a superuser.

Tasks:

pgre dbs                                        # Show list of databases from database.yml
pgre install ENV                                # Install function swap_for_pkey to database
pgre rebuild ENV (table|index)[,(table|index)]  # rebuild tables,indexes,pkeys
pgre tables ENV                                 # Show tables of database

Use case:

# Show databases
pgre dbs

# Show tables with indexes, which full size more than 1Gb
pgre tables production -s 1000

# Show process without really rebuild
pgre rebuild production users,some_index1

# Rebuild indexes 
pgre rebuild production users --write

# Rebuild indexes and no ask confirmation (not recommended)
pgre rebuild production users --write --no-ask  

Explanation/Warning:

Rebuild index produces sqls:

1. CREATE INDEX CONCURRENTLY bla2 on some_table USING btree (some_field);
2. ANALYZE some_table;
3. DROP INDEX bla;
4. ALTER INDEX bla2 RENAME TO bla; 

1 can be blocked by long running query(LRQ), or autovacuum (in this case kill autovacuum or wait LRQ). By careful, if between 1 and (3,4) started LRQ or autovacuum, in this case (3,4) will block all queries on this table. If it happens, and (3,4) not quit after < 30s, you should stop (3,4) by cancel query in PostgreSQL, and later execute manually.

Rebuild pkey produces sqls:

1. CREATE UNIQUE INDEX CONCURRENTLY some_table_pkey2 on some_table USING btree (ID);
2. ANALYZE some_table;
3. SELECT swap_for_pkey('public', 'some_table_pkey', 'some_table_pkey2');

Same issue with 1 and 3.

MIT-LICENCE