319 Commits

Author SHA1 Message Date
Daniele Varrazzo
700a1a6c48 More explicit error message if the version functions are not found 2013-04-17 18:11:33 +01:00
Daniele Varrazzo
0e74882429 Had to shorten the tablespace metavar
In the rst docs two spaces are required between option and doc.
2013-04-17 09:17:35 +01:00
Daniele Varrazzo
42c65d16f8 Merge branch 'change-tablespace'
Conflicts:
	bin/pg_repack.c
	doc/pg_repack.rst
2013-04-17 09:07:09 +01:00
Daniele Varrazzo
7617e07f10 Options sorted in a slightly more rational order
--no-order now is almost useless, but list it next to --order-by.
--jobs only specifies how to do something, not what to do. On the
same basis probably --no-analyze should be pushed further up.
2013-04-17 01:44:50 +01:00
Daniele Varrazzo
8efbd9e1c6 Imply --no-order for non-clustered tables
--no-order can still be specified to VACUUM FULL a clustered tables
(not so useful I guess...)

Fixes issue #6.
2013-04-17 01:42:22 +01:00
Daniele Varrazzo
1d62d8d0c5 More helpful error messages in case of conflicting triggers
Closes issue #5.
2013-04-17 00:57:01 +01:00
Daniele Varrazzo
127d5cbfb2 Added missing entries to the pg_repack 1.2 changes 2013-04-16 23:50:52 +01:00
Daniele Varrazzo
b6bd078e92 Added documentation for --tablespace and --moveidx 2013-04-16 23:39:51 +01:00
Daniele Varrazzo
d98a14bb55 Fixed index definition tokenization
In the previous commit skip_const was going ahead the space thus removing the
starting quote. Also fixed (and tested) trailing part after the tablespace
name, e.g. the WHERE clause.
2013-04-16 23:23:26 +01:00
Daniele Varrazzo
83fdb2a9e0 Added implementation for --moveidx
Note: if original namespace is "foo bar", repack_indexdef gives a bad
result. This is weird as apparently skip_ident can deal with spaces in
a quoted identifier. Committing as I'm going home, will deal with that
later.
2013-04-16 22:42:23 +01:00
Daniele Varrazzo
43dfe229c9 Added check for target tablespace existence 2013-04-16 22:42:23 +01:00
Daniele Varrazzo
a6e50515ce Merge branch 'master' into change-tablespace 2013-04-16 22:40:43 +01:00
Daniele Varrazzo
e9339f44ea Merge branch 'issue-3'
Conflicts:
	bin/expected/repack.out
	bin/sql/repack.sql
2013-04-16 22:36:40 +01:00
Daniele Varrazzo
c542bf2641 Added tests for the namespace change feature
Currently not passing as --moveidx not implemented yet.
2013-04-16 18:33:45 +01:00
Daniele Varrazzo
6488ecabd2 Added --moveidx command line option
The option is only parsed, not implemented yet.
2013-04-16 18:32:46 +01:00
Daniele Varrazzo
6710e514db Added --namespace option to set the namespace of repacked tables
Bumped version number to enforce extension re-creation as the SQL has
been modified.

Current limitations:

- Check for namespace existence: on error temp objects are left around
- What happens to the indexes?
- Tests needed.
- Should the default be the GUC default_tablespace instead of pg_default?
  This is actually an original pg_repack shortcoming, not a regression.
2013-02-21 17:20:54 +00:00
Daniele Varrazzo
89031f9cc5 Dropped unused indexes info 2013-02-21 17:20:28 +00:00
Daniele Varrazzo
f9dc02191d Dropped bogus check and unused parameters allocation 2013-02-21 15:06:39 +00:00
Josh Kupershmidt
7a31f4fbf6 comment typofix. 2013-02-20 20:26:48 -07:00
Josh Kupershmidt
f551b56f1a Merge branch 'master' into concurrent_indexes.
Conflicts:
	bin/pg_repack.c
2012-12-14 22:17:36 -07:00
Josh Kupershmidt
7213e2fe7b Use CLEARPGRES() macro to call PQclear() and set res to NULL.
This simplifies some of the error handling blocks, as now
we can unconditionally use this macro without worrying about multiple
PQclear() calls causing a double-free().

Per discussion with Daniele.
2012-12-14 20:13:23 -07:00
Josh Kupershmidt
aa428b68c8 Merge branch 'concurrent_indexes' of github.com:schmiddy/pg_repack into concurrent_indexes 2012-12-14 18:52:16 -07:00
Josh Kupershmidt
2e4ac733c1 Fix up buggy initialization code for poll() and select().
Also some logging and variable name cleanup.
2012-12-14 18:49:00 -07:00
Josh Kupershmidt
d43ff3cd24 Add description of --jobs to the docs. Also, add missing newline in --help output. 2012-12-14 18:49:00 -07:00
Josh Kupershmidt
4f25c26284 restore the warning message about invalid indexes, to match old behavior and pass installcheck. 2012-12-14 18:49:00 -07:00
Josh Kupershmidt
a1821e3dcb Several fixes for concurrent index builds:
* Use poll() if it is available, or select() otherwise, to
   efficiently wait on index builds in worker queries to finish.
 * fix off-by-one error when initially assigning workers
 * move PQsetnonblocking() calls to setup_workers()
2012-12-14 18:49:00 -07:00
Josh Kupershmidt
8ab54cc803 Small fixes related to the concurrent_indexes changes.
Move PQsetnonblocking() call to setup_workers(), and make
sure we're not forgetting any workers.
2012-12-14 18:49:00 -07:00
Josh Kupershmidt
509e568c52 First pass at implementing concurrent index builds using multiple connections.
Adds a new --jobs command-line argument to specify how many worker
connections you want. These worker connections should stick around
while processing table(s) in a single database. For each table,
parcel out the indexes to be built among these worker conns,
submitting each CREATE INDEX ... request using PQsendQuery() i.e.
in non-blocking fashion.

Most of this is still rather crude, in particular the
while (num_active_workers) ... loop in rebuild_indexes(), but
it seems to be working, so I'm committing here.
2012-12-14 18:49:00 -07:00
Josh Kupershmidt
962fdff1af Fix up buggy initialization code for poll() and select().
Also some logging and variable name cleanup.
2012-12-14 18:17:45 -07:00
Josh Kupershmidt
b9c7189fa9 Add description of --jobs to the docs. Also, add missing newline in --help output. 2012-12-13 21:10:59 -07:00
Josh Kupershmidt
4c0c2f3618 restore the warning message about invalid indexes, to match old behavior and pass installcheck. 2012-12-13 19:56:44 -07:00
Josh Kupershmidt
42357353a7 Several fixes for concurrent index builds:
* Use poll() if it is available, or select() otherwise, to
   efficiently wait on index builds in worker queries to finish.
 * fix off-by-one error when initially assigning workers
 * move PQsetnonblocking() calls to setup_workers()
2012-12-13 19:12:05 -07:00
Josh Kupershmidt
b4d8a90437 Don't perform repack_cleanup() if we haven't actually set up z_repack_trigger etc.
Fixes a regression introduced in master (by the multiple --tables
changes, I think).
2012-12-13 18:55:19 -07:00
Josh Kupershmidt
8c2dd16608 Small fixes related to the concurrent_indexes changes.
Move PQsetnonblocking() call to setup_workers(), and make
sure we're not forgetting any workers.
2012-12-11 19:46:49 -07:00
Josh Kupershmidt
0bdb4bb96f Missing PQclear(). 2012-12-11 19:12:57 -07:00
Josh Kupershmidt
0d984ed3e5 First pass at implementing concurrent index builds using multiple connections.
Adds a new --jobs command-line argument to specify how many worker
connections you want. These worker connections should stick around
while processing table(s) in a single database. For each table,
parcel out the indexes to be built among these worker conns,
submitting each CREATE INDEX ... request using PQsendQuery() i.e.
in non-blocking fashion.

Most of this is still rather crude, in particular the
while (num_active_workers) ... loop in rebuild_indexes(), but
it seems to be working, so I'm committing here.
2012-12-10 21:08:01 -07:00
Daniele Varrazzo
fcd3f7eaae Added pg_repack runs to check the get_order_by definitions work 2012-12-09 12:11:10 +00:00
Daniele Varrazzo
13cf8679db Added support for COLLATE to index keys 2012-12-09 12:02:49 +00:00
Daniele Varrazzo
4bcb7641c9 Function get_index_keys() renamed to get_order_by()
It was a FIXME item in the source. Reasonably so.
2012-12-09 11:35:52 +00:00
Josh Kupershmidt
9d776b3980 Likely fix for Issue #4 -- make sure params[] is long enough for two strings. 2012-12-08 18:57:27 -07:00
Daniele Varrazzo
a47686a7ee Added support for DESC and NULLS FIRST/LAST to index keys
Fixes issue #3
2012-12-09 01:11:39 +00:00
Josh Kupershmidt
6fc41e9c1a Fix 'installcheck', since the last commit broke the expected output when the table is missing a valid primary/unique key. 2012-12-06 21:26:12 -07:00
Josh Kupershmidt
66ae2f33a7 Downgrade ERROR to WARNING in the case where a table does not have a primary key or not-null unique key.
We want to be able to keep processing further tables if we
encounter this problem on one of many --tables.
2012-12-06 21:05:54 -07:00
Josh Kupershmidt
f6ca290fb2 Support for multiple --tables, as well as Concurrent DDL Guard.
Code merged in, with a few more changes, from the multiple_tables branch.

The multiple --table support and SimpleStringList code is largely
borrowed from pg_dump. (pg_reorg Issue #18).

The concurrent DDL guard is implemented using an auxiliary
database connection (pg_reorg Issue #8) which holds an ACCESS SHARE
lock on the target table while pg_repack conducts the rest of its work.
2012-12-06 20:58:33 -07:00
Josh Kupershmidt
a072cc9812 Ignore other pg_repack clients which may be running concurrently for the purposes of SQL_XID_SNAPSHOT.
Use application_name from pg_stat_activity, if available, to identify
other pg_repack clients. Fixes Issue #1.
2012-12-06 16:11:55 -07:00
Daniele Varrazzo
1a0a28d3f8 Bugtrack url changed to pg_repack's one 2012-12-01 12:58:50 +00:00
Daniele Varrazzo
c395f72a1c Some docs clarification if you find a stray trigger 2012-12-01 12:50:27 +00:00
Josh Kupershmidt
fbcd24b4e0 Have the client double-check that it is connected as a database superuser before plowing through initialization steps.
Addresses Issue #2.
2012-11-30 20:09:22 -07:00
Josh Kupershmidt
3b856623fd Add comment explaining how race condition between CREATE TABLE ... AS SELECT and recording of log entries is avoided. 2012-11-29 20:27:33 -07:00
Josh Kupershmidt
d402a73e42 No need to use strlen() with StringInfoData. 2012-11-26 20:08:47 -07:00