summaryrefslogtreecommitdiff
path: root/src/backend/commands
AgeCommit message (Collapse)Author
2006-01-19It turns out that TablespaceCreateDbspace fails badly if a relcache flushTom Lane
occurs when it tries to heap_open pg_tablespace. When control returns to smgrcreate, that routine will be holding a dangling pointer to a closed SMgrRelation, resulting in mayhem. This is of course a consequence of the violation of proper module layering inherent in having smgr.c call a tablespace command routine, but the simplest fix seems to be to change the locking mechanism. There's no real need for TablespaceCreateDbspace to touch pg_tablespace at all --- it's only opening it as a way of locking against a parallel DROP TABLESPACE command. A much better answer is to create a special-purpose LWLock to interlock these two operations. This drops TablespaceCreateDbspace quite a few layers down the food chain and makes it something reasonably safe for smgr to call.
2006-01-18Modify pgstats code to reduce performance penalties from oversized stats dataTom Lane
files: avoid creating stats hashtable entries for tables that aren't being touched except by vacuum/analyze, ensure that entries for dropped tables are removed promptly, and tweak the data layout to avoid storing useless struct padding. Also improve the performance of pgstat_vacuum_tabstat(), and make sure that autovacuum invokes it exactly once per autovac cycle rather than multiple times or not at all. This should cure recent complaints about 8.1 showing much higher stats I/O volume than was seen in 8.0. It'd still be a good idea to revisit the design with an eye to not re-writing the entire stats dataset every half second ... but that would be too much to backpatch, I fear.
2006-01-18Add a new system view, pg_cursors, that displays the currently availableNeil Conway
cursors. Patch from Joachim Wieland, review and ediorialization by Neil Conway. The view lists cursors defined by DECLARE CURSOR, using SPI, or via the Bind message of the frontend/backend protocol. This means the view does not list the unnamed portal or the portal created to implement EXECUTE. Because we do list SPI portals, there might be more rows in this view than you might expect if you are using SPI implicitly (e.g. via a procedural language). Per recent discussion on -hackers, the query string included in the view for cursors defined by DECLARE CURSOR is based on debug_query_string. That means it is not accurate if multiple queries separated by semicolons are submitted as one query string. However, there doesn't seem a trivial fix for that: debug_query_string is better than nothing. I also changed SPI_cursor_open() to include the source text for the portal it creates: AFAICS there is no reason not to do this. Update the documentation and regression tests, bump the catversion.
2006-01-16Change the parameter_types column of the pg_prepared_statements to beNeil Conway
an array of regtype, rather than an array of OIDs. This is likely to be more useful to user, and the type OID can easily be obtained by casting a regtype value to OID. Per suggestion from Tom. Update the documentation and regression tests, and bump the catversion.
2006-01-13Document that CREATE OPERATOR CLASS amounts to granting public executeTom Lane
permissions on the functions and operators contained in the opclass. Since we already require superuser privilege to create an operator class, there's no expansion-of-privilege hazard here, but if someone were to get the idea of building an opclass containing functions that need security restrictions, we'd better warn them off. Also, change the permission checks from have-execute-privilege to have-ownership, and then comment them all out since they're dead code anyway under the superuser restriction.
2006-01-13Require the issuer of CREATE TYPE to own the functions mentioned in theTom Lane
type definition. Because use of a type's I/O conversion functions isn't access-checked, CREATE TYPE amounts to granting public execute permissions on the functions, and so allowing it to anybody means that someone could theoretically gain access to a function he's not supposed to be able to execute. The parameter-type restrictions already enforced by CREATE TYPE make it fairly unlikely that this oversight is meaningful in practice, but still it seems like a good idea to plug the hole going forward. Also, document the implicit grant just in case anybody gets the idea of building I/O functions that might need security restrictions.
2006-01-12Repair "Halloween problem" in EvalPlanQual: a tuple that's been inserted byTom Lane
our own command (or more generally, xmin = our xact and cmin >= current command ID) should not be seen as good. Else we may try to update rows we already updated. This error was inserted last August while fixing the even bigger problem that the old coding wouldn't see *any* tuples inserted by our own transaction as good. Per report from Euler Taveira de Oliveira.
2006-01-08Add a new system view, pg_prepared_statements, that can be used toNeil Conway
access information about the prepared statements that are available in the current session. Original patch from Joachim Wieland, various improvements by Neil Conway. The "statement" column of the view contains the literal query string sent by the client, without any rewriting or pretty printing. This means that prepared statements created via SQL will be prefixed with "PREPARE ... AS ", whereas those prepared via the FE/BE protocol will not. That is unfortunate, but discussion on -patches did not yield an efficient way to improve this, and there is some merit in returning exactly what the client sent to the backend. Catalog version bumped, regression tests updated.
2006-01-05Make all command-line options of postmaster and postgres the same. SeePeter Eisentraut
http://archives.postgresql.org/pgsql-hackers/2006-01/msg00151.php for the complete plan.
2006-01-04Fix another case in which autovacuum would fail while analyzingTom Lane
expressional indexes. Per report from Brian Hirt.
2005-12-28Add regression tests for CSV and \., and add automatic quoting of aBruce Momjian
single column dump that has a \. value, so the load works properly. I also added documentation describing this issue.
2005-12-27Our code had:Bruce Momjian
if (c == '\\' && cstate->line_buf.len == 0) The problem with that is the because of the input and _output_ buffering, cstate->line_buf.len could be zero even if we are not on the first character of a line. In fact, for a typical line, it is zero for all characters on the line. The proper solution is to introduce a boolean, first_char_in_line, that we set as we enter the loop and clear once we process a character. I have restructured the line-reading code in copy.c by: o merging the CSV/non-CSV functions into a single function o used macros to centralize and clarify the buffering code o updated comments o renamed client_encoding_only to encoding_embeds_ascii o added a high-bit test to the encoding_embeds_ascii test for performance o in CSV mode, allow a backslash followed by a non-period to continue being processed as a data value There should be no performance impact from this patch because it is functionally equivalent. If you apply the patch you will see copy.c is much clearer in this area now and might suggest additional optimizations. I have also attached a 8.1-only patch to fix the CSV \. handling bug with no code restructuring.
2005-12-23Allow CREATE/ALTER ROLE PASSWORD NULL to allow restoring the default statePeter Eisentraut
of having no password.
2005-12-14Defend against crash while processing Describe Statement or Describe PortalTom Lane
messages, when client attempts to execute these outside a transaction (start one) or in a failed transaction (reject message, except for COMMIT/ROLLBACK statements which we can handle). Per report from Francisco Figueiredo Jr.
2005-12-03Tweak indexscan machinery to avoid taking an AccessShareLock on an indexTom Lane
if we already have a stronger lock due to the index's table being the update target table of the query. Same optimization I applied earlier at the table level. There doesn't seem to be much interest in the more radical idea of not locking indexes at all, so do what we can ...
2005-11-29Fix EXPLAIN and EXECUTE commands to pass portal parameters through toTom Lane
the executor. This allows, for example, JDBC clients to use '?' bound parameters in these commands. Per gripe from Virag Saksena.
2005-11-26Teach tid-scan code to make use of "ctid = ANY (array)" clauses, so thatTom Lane
"ctid IN (list)" will still work after we convert IN to ScalarArrayOpExpr. Make some minor efficiency improvements while at it, such as ensuring that multiple TIDs are fetched in physical heap order. And fix EXPLAIN so that it shows what's really going on for a TID scan.
2005-11-22Re-run pgindent, fixing a problem where comment lines after a blankBruce Momjian
comment line where output as too long, and update typedefs for /lib directory. Also fix case where identifiers were used as variable names in the backend, but as typedefs in ecpg (favor the backend for indenting). Backpatch to 8.1.X.
2005-11-22 DROP DATABASE IF EXISTS variantAndrew Dunstan
2005-11-21Implement DROP OWNED and REASSIGN OWNED. These new commands facilitate theAlvaro Herrera
process of dropping roles by dropping objects owned by them and privileges granted to them, or giving the owned objects to someone else, through the use of the data stored in the new pg_shdepend catalog. Some refactoring of the GRANT/REVOKE code was needed, as well as ALTER OWNER code. Further cleanup of code duplication in the GRANT code seems necessary. Implemented by me after an idea from Tom Lane, who also provided various kind of implementation advice. Regression tests pass. Some tests for the new functionality are also added, as well as rudimentary documentation.
2005-11-20Remove the t_datamcxt field of HeapTupleData. This was introduced forTom Lane
the convenience of tuptoaster.c and is no longer needed, so may as well get rid of some small amount of overhead.
2005-11-19DROP objecttype IF EXISTS for the following objects:Andrew Dunstan
table view index sequence schema type domain conversion
2005-11-07R-tree is dead ... long live GiST.Tom Lane
2005-11-04Disregard superuserness when checking to see if a role GRANT wouldTom Lane
create circularity of role memberships. This is a minimum-impact fix for the problem reported by Florian Pflug. I thought about removing the superuser_arg test from is_member_of_role() altogether, as it seems redundant for many of the callers --- but not all, and it's way too late in the 8.1 cycle to be making large changes. Perhaps reconsider this later.
2005-11-03Rename the members of CommandDest enum so they don't collide with other uses ofAlvaro Herrera
those names. (Debug and None were pretty bad names anyway.) I hope I catched all uses of the names in comments too.
2005-10-29Message correctionsPeter Eisentraut
2005-10-21Fix EXPLAIN ANALYZE bug noted by Wiebe Cazemier: although we wereTom Lane
properly advancing the CommandCounter between multiple sub-queries generated by rules, we forgot to update the snapshot being used, so that the successive sub-queries didn't actually see each others' results. This is still not *exactly* like the semantics of normal execution of the same queries, in that we don't take new transaction snapshots and hence don't see changes from concurrently committed commands, but I think that's OK and probably even preferable for EXPLAIN ANALYZE.
2005-10-18A few trivial code cleanups motivated by reading warnings generatedTom Lane
by a recent HP C compiler. Mostly, get rid of useless local variables that are assigned to but never used.
2005-10-17Clean up libpq's pollution of application namespace by renaming theTom Lane
exported routines of ip.c, md5.c, and fe-auth.c to begin with 'pg_'. Also get rid of the vestigial fe_setauthsvc/fe_getauthsvc routines altogether.
2005-10-15Standard pgindent run for 8.1.Bruce Momjian
2005-10-10Use a safer order of operations in dropdb(): rollbackable operations,Tom Lane
ie removing shared-dependency entries, should happen before non-rollbackable ones. That way a failure during the rollbackable part doesn't leave us with inconsistent state.
2005-10-06Minor API cleanup for async notifications: we can only register theNeil Conway
current backend in pg_listener, so there is little point in making the PID to register part of async.c's public API. Other minor tweaks.
2005-10-03COPY's test for read-only transaction was backward; it prohibited COPY TOTom Lane
where it should prohibit COPY FROM. Found by Alon Goldshuv.
2005-10-03Separate out the VacRUsage stuff as an independent module, in preparationTom Lane
for using it for other things besides VACUUM.
2005-10-03Preserve tuple OIDs during ATRewriteTable. Per gripe from Duncan Crombie.Tom Lane
2005-10-02Change nextval and other sequence functions to specify their sequenceTom Lane
argument as a 'regclass' value instead of a text string. The frontend conversion of text string to pg_class OID is now encapsulated as an implicitly-invocable coercion from text to regclass. This provides backwards compatibility to the old behavior when the sequence argument is explicitly typed as 'text'. When the argument is just an unadorned literal string, it will be taken as 'regclass', which means that the stored representation will be an OID. This solves longstanding problems with renaming sequences that are referenced in default expressions, as well as new-in-8.1 problems with renaming such sequences' schemas or moving them to another schema. All per recent discussion. Along the way, fix some rather serious problems in dbmirror's support for mirroring sequence operations (int4 vs int8 confusion for instance).
2005-09-24Clean up possibly-uninitialized-variable warnings reported by gcc 4.x.Tom Lane
2005-09-24Suppress signed-vs-unsigned-char warnings.Tom Lane
2005-09-22Take exclusive buffer lock in scan_heap() to eliminate some corner casesTom Lane
in which invalid page data could be transiently written to disk by concurrent bgwriter activity. There doesn't seem any risk of loss of actual user data, but an empty page could possibly be left corrupt if a crash occurs before the correct data gets written out. Pointed out by Alvaro Herrera.
2005-09-08Create the pg_pltemplate system catalog to hold template informationTom Lane
for procedural languages. This replaces the hard-wired table I had originally proposed as a stopgap solution. For the moment, the initial contents only include languages shipped with the core distribution.
2005-09-05Implement a preliminary 'template' facility for procedural languages,Tom Lane
as per my recent proposal. For now the template data is hard-wired in proclang.c --- this should be replaced later by a new shared system catalog, but we don't want to force initdb during 8.1 beta. This change lets us cleanly load existing dump files even if they contain outright wrong information about a PL's support functions, such as a wrong path to the shared library or a missing validator function. Also, we can revert the recent kluges to make pg_dump dump PL support functions that are stored in pg_catalog. While at it, I removed the code in pg_regress that replaced $libdir with a hardcoded path for temporary installations. This is no longer needed given our support for relocatable installations.
2005-09-02Clean up a couple of ad-hoc computations of the maximum number of tuplesTom Lane
on a page, as suggested by ITAGAKI Takahiro. Also, change a few places that were using some other estimates of max-items-per-page to consistently use MaxOffsetNumber. This is conservatively large --- we could have used the new MaxHeapTuplesPerPage macro, or a similar one for index tuples --- but those places are simply declaring a fixed-size buffer and assuming it will work, rather than actively testing for overrun. It seems safer to size these buffers in a way that can't overflow even if the page is corrupt.
2005-09-01Fix unportable uses of <ctype.h> functions. Per Sergey Koposov.Tom Lane
2005-08-30DropTableSpace forgot to remove dependency on tablespace's owner.Tom Lane
Per report from Jaime Casanova.
2005-08-26Arrange for indexes and toast tables to inherit their ownership fromTom Lane
the parent table, even if the command that creates them is executed by someone else (such as a superuser or a member of the owning role). Per gripe from Michael Fuhr.
2005-08-24Fix ExecBRDeleteTriggers so that deletion is not suppressed when deleteTom Lane
triggers exist but are all disabled. Problem noted by Gavin Sherry in original discussion of enable/disable trigger patch, but was never addressed.
2005-08-23Add ALTER TABLE ENABLE/DISABLE TRIGGER commands. Change pg_dump toTom Lane
use these instead of its previous hack of changing pg_class.reltriggers. Documentation is lacking, will add that later. Patch by Satoshi Nagayasu, review and some extra work by Tom Lane.
2005-08-23Fix wrong dependency on owner created by ALTER OPCLASS OWNER.Tom Lane
Per Alvaro.
2005-08-22Cause ALTER INDEX OWNER to generate a warning and do nothing, rather thanTom Lane
erroring out as it has done for the last couple weeks. Document that this form is now ignored because indexes can't usefully have different owners from their parent tables. Fix pg_dump to not generate ALTER OWNER commands for indexes.
2005-08-22Fix unwanted denial of ALTER OWNER rights to superusers. There was someTom Lane
discussion of getting around this by relaxing the checks made for regular users, but I'm disinclined to toy with the security model right now, so just special-case it for superusers where needed.