Commit Graph

187 Commits

Author SHA1 Message Date
61bf8acaf0 Use our own namespace for advisory locks.
Switch to using the two-input form of pg_advisory_lock(), so as
to avoid impacting other applications which might happen to lock
just the OID of the table. The REPACK_LOCK_PREFIX_STR is a decimal
version of the first three bytes of
  echo -n "pg_repack" | sha1sum
2013-06-22 09:56:44 -04:00
bebe6ffb2b Factor out advisory locking code into advisory_lock()
Also, some further small fixes of error messages, comments,
marking dubious kludges (e.g. strchr() to determine schema name).
2013-06-22 09:35:19 -04:00
673eac7b42 Change 'have_error' to 'ret' for simplicity. 2013-06-22 08:59:47 -04:00
d79d342eea Add advisory locking to repack_one_table()
Avoids danger (or just pointlessness) of having someone run a
table-wide repack and an indexes-only repack of the same table
at the same time.
2013-06-22 08:41:41 -04:00
62b5e4fb11 A few cosmetic fixes to pg_repack.c:
* fix old reference to --indexes-only
 * trailing whitespace and indentation cleanup to match rest of code
 * XXX note about improving advisory locking
2013-06-22 06:51:41 -04:00
ee23ec8ffd Initial import of indexes-only building patch.
Patch from Beena Emerson.
2013-06-21 18:41:09 -04:00
5b6a162996 Shuffle sanity checks into preliminary_checks().
This refactoring helps pave the way for online indexes-only
repacking. Patch by Beena Emerson.
2013-06-20 21:11:25 -04:00
a942042215 Fix up the --help output for --jobs. 2013-06-18 19:45:05 -04:00
29023206b5 Fix lock_exclusive()'s behavior during swap step.
Since we are not starting a new transaction in conn2 during the
swap step, we need to make sure that if our LOCK query is canceled
due to statement_timeout that conn2's transaction is not left in
a useless error state. Use SAVEPOINT and ROLLBACK TO SAVEPOINT to
avoid this problem.
2013-06-16 20:17:24 -04:00
9c8d519415 Kludge to remove -lpam from LIBS in Makefiles.
Per Issue #7 from armanddp, it seems the RHEL/CentOS packages
of Postgres are built against libpam, which shows up in
the LIBS reported by pg_config. We don't actually need to
link in libpam for pg_repack, so manually remove it from
our LIBS. This helps a little bit for building on
RHEL/CentOS, though the issue of libpgport.a missing
on that platform still looms.
2013-05-23 20:31:56 -04:00
dc31920616 Move regression tests from ./bin/ to ./regress/ 2013-05-09 21:15:48 -04:00
98d304712c Merge branch 'funky-version-check'
Conflicts:
	bin/expected/repack.out
	bin/sql/repack.sql
2013-05-05 00:09:39 +01:00
a561c924f7 Parse tablespace/where in parse_indexdef
Makes injecting the target tablespace much easier and fixes interaction
between tablespace and WITH/WHERE clauses.

Added tests to check the correct indexes definition.
2013-05-05 00:07:14 +01:00
cc2abf4b25 Fixed tablespace assignment in index with WITH clause
Reported by Beena Emerson.
2013-05-02 23:32:30 +01:00
f886e0dba6 Fixed --order-by broken by namespaces refactoring
Also added a regression test for it.

Bug and patch from Beena Emerson, thany you.
2013-04-22 11:19:56 +01:00
fb07fad34a Make sure to close the transactions after repack_one_table
If we exit early (e.g. checking the triggers) repack_cleanup() is not called
but we must close the transactions anyway.
2013-04-18 02:29:51 +01:00
54ba3c19cd Install plpgsql on test databases 8.3 and 8.4
Required by triggers tests
2013-04-18 01:32:46 +01:00
a2138b6d7d Ignore AFTER triggers sorting after z_repack_trigger
They are not a problem, and they fore after the BEFORE trigger anyway.

To be checked against more PostgreSQL versions.
2013-04-18 01:22:24 +01:00
477fba884c Ignore AFTER triggers sorting after z_repack_trigger
They are not a problem, and they fore after the BEFORE trigger anyway.

To be checked against more PostgreSQL versions.
2013-04-18 01:19:52 +01:00
14c4d4653e Make the version number arith without using bc
Not as available as I thought.

Can't use the 0 prefix to make the 3rd number optional as $(()) parses is as
octal, so only use the first 2 numbers.

Also fixed collate test: not available on PG 9.0.
2013-04-18 01:10:22 +01:00
dd06f25930 Tests on COLLATE only run on PG versions supporting it 2013-04-18 00:34:44 +01:00
c314cbda75 Check PostgreSQL version number as number in the makefile
Not entirely happy about the solution but I like the uniform tests.
2013-04-18 00:29:23 +01:00
db40e71abc Fixed query for PG 8.4
Posgtres cannot find a cast rule.
2013-04-17 22:08:24 +01:00
3d0b02c654 Try to repack all tables with pkey, not only the ones with ckey
This is consistent with --no-order not been required anymore.
2013-04-17 18:56:50 +01:00
08a8c943e5 Logging the table we are working on at info level 2013-04-17 18:35:54 +01:00
5773c75b58 Using elog instead of printf to report what database we are on
I know the ... is pretty but it messes up with warnings etc. By the way there
was a \n so the skipped part wasn't even going on the same line.
2013-04-17 18:35:49 +01:00
4a3f42ab70 Dropped unneeded error check
if pgut_execute fails it bails out.
2013-04-17 18:11:34 +01:00
2335a4da82 Dropped redundant check for missing schema
If the schema is missing we have already stopped trying to check
the version numbers above.
2013-04-17 18:11:34 +01:00
700a1a6c48 More explicit error message if the version functions are not found 2013-04-17 18:11:33 +01:00
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
42c65d16f8 Merge branch 'change-tablespace'
Conflicts:
	bin/pg_repack.c
	doc/pg_repack.rst
2013-04-17 09:07:09 +01:00
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
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
1d62d8d0c5 More helpful error messages in case of conflicting triggers
Closes issue #5.
2013-04-17 00:57:01 +01:00
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
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
43dfe229c9 Added check for target tablespace existence 2013-04-16 22:42:23 +01:00
a6e50515ce Merge branch 'master' into change-tablespace 2013-04-16 22:40:43 +01:00
e9339f44ea Merge branch 'issue-3'
Conflicts:
	bin/expected/repack.out
	bin/sql/repack.sql
2013-04-16 22:36:40 +01:00
c542bf2641 Added tests for the namespace change feature
Currently not passing as --moveidx not implemented yet.
2013-04-16 18:33:45 +01:00
6488ecabd2 Added --moveidx command line option
The option is only parsed, not implemented yet.
2013-04-16 18:32:46 +01:00
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
89031f9cc5 Dropped unused indexes info 2013-02-21 17:20:28 +00:00
f9dc02191d Dropped bogus check and unused parameters allocation 2013-02-21 15:06:39 +00:00
7a31f4fbf6 comment typofix. 2013-02-20 20:26:48 -07:00
f551b56f1a Merge branch 'master' into concurrent_indexes.
Conflicts:
	bin/pg_repack.c
2012-12-14 22:17:36 -07:00
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
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
d43ff3cd24 Add description of --jobs to the docs. Also, add missing newline in --help output. 2012-12-14 18:49:00 -07:00
4f25c26284 restore the warning message about invalid indexes, to match old behavior and pass installcheck. 2012-12-14 18:49:00 -07:00