summaryrefslogtreecommitdiff
path: root/src/backend
AgeCommit message (Collapse)Author
2005-06-10Quick hack to allow the outer query's tuple_fraction to be passed downTom Lane
to a subquery if the outer query is simple enough that the LIMIT can be reflected directly to the subquery. This didn't use to be very interesting, because a subquery that couldn't have been flattened into the upper query was usually not going to be very responsive to tuple_fraction anyway. But with new code that allows UNION ALL subqueries to pay attention to tuple_fraction, this is useful to do. In particular this lets the optimization occur when the UNION ALL is directly inside a view.
2005-06-10If a LIMIT is applied to a UNION ALL query, plan each UNION arm asTom Lane
if the limit were directly applied to it. This does not actually add a LIMIT plan node to the generated subqueries --- that would be useless overhead --- but it does cause the planner to prefer fast- start plans when the limit is small. After an idea from Phil Endecott.
2005-06-10Revise searching of subplan target lists to use something more efficientTom Lane
than tlist_member calls. Building a large join tlist is still O(N^2), but with a much smaller constant factor than before.
2005-06-09Free buffer allocated via malloc (process is short-lived, but fix it anyway).Bruce Momjian
2005-06-09Mention prefix %t has no milliseconds.Bruce Momjian
2005-06-09Restructure log_line_prefix options to be clearer:Bruce Momjian
#log_line_prefix = '' # %u = user name # %d = database name # %r = remote host and port # %h = remote host # %p = PID # %t = timestamp # %m = timestamp with milliseconds # %i = command tag # %c = session id # %l = session line number # %s = session start timestamp # %x = transaction id # %q = stop here in non-session processes # %% = '%' # e.g. '<%u%%%d> '
2005-06-09This patch against 8.0.0beta1 source adds log_line_prefix options forBruce Momjian
millisecond timestamps (%m) and remote host (%h). The milliseconds are useful for QPS measurements. Ed L.
2005-06-09Fix typo in comment, per Alvaro.Tom Lane
2005-06-09Fix assign_datestyle() so that it doesn't misleadingly complain aboutTom Lane
'conflicting datestyle specifications' for input that's actually only redundant, such as SET DATESTYLE = MDY, MDY. Per recent gripe.
2005-06-09Make SPI set SPI_processed for CREATE TABLE AS / SELECT INTO commands;Tom Lane
this in turn causes CREATE TABLE AS in plpgsql to set ROW_COUNT. This is how it behaved before 7.4; I had unintentionally changed the behavior in a bit of sloppy micro-optimization.
2005-06-09Add missing #include -- mea culpa.Tom Lane
2005-06-09Put a critical section around update of hash index metapage. PerTom Lane
discussion with Qingqing Zhou.
2005-06-09Simplify the planner's join clause management by storing join clausesTom Lane
of a relation in a flat 'joininfo' list. The former arrangement grouped the join clauses according to the set of unjoined relids used in each; however, profiling on test cases involving lots of joins proves that that data structure is a net loss. It takes more time to group the join clauses together than is saved by avoiding duplicate tests later. It doesn't help any that there are usually not more than one or two clauses per group ...
2005-06-08Marginal hack to avoid spending a lot of time in find_join_rel duringTom Lane
large planning problems: when the list of join rels gets too long, make an auxiliary hash table that hashes on the identifying Bitmapset.
2005-06-08Remove grammar productions for prefix and postfix % and ^ operators,Tom Lane
as well as the existing pg_catalog entries for prefix and postfix %. These have never been documented, though they did appear in one old regression test. This avoids surprising behavior in cases like "SELECT -25 % -10". Per recent discussion. Note: although there is a catalog change here, I did not force initdb since there's no harm in leaving the inaccessible entries in one's copy of pg_operator.
2005-06-08Change WAL-logging scheme for multixacts to be more like regularTom Lane
transaction IDs, rather than like subtrans; in particular, the information now survives a database restart. Per previous discussion, this is essential for PITR log shipping and for 2PC.
2005-06-07Mention ipcrm and ipcclean in error message.Bruce Momjian
2005-06-07Add a function lastval(), which returns the value returned by theNeil Conway
last nextval() or setval() performed by the current session. Update the docs, add regression tests, and bump the catalog version. Patch from Dennis Björklund, various improvements by Neil Conway.
2005-06-07Ipcrm -> ipcclean in error message:Bruce Momjian
--------------------------------------------------------------------------- While playing around, I got the following error message: -- FATAL: pre-existing shared memory block (key 5432001, ID 90898435) is still in use HINT: If you're sure there are no old server processes still running, remove the shared memory block with the command "ipcrm", or just delete the file "/home/hlinnaka/pgsql/data/postmaster.pid". --- Thats normal because I used "kill -9 postmaster" to shut down. The hint advises me to use "ipcrm", but there's the "ipcclean" script in bin for just this purpose. The hint should probably advise to use ipcclean. The attached patch replaces all occurances of "ipcrm" with "ipcclean" in src/backend/utils/init/miscinit.c and all the translations in src/backend/po. While reviewing the patch, I noticed a likely typo in hr.po. While I don't speak Croatian, the translation seems to advise to use the "icpm(1)" command. I changed that to "ipcclean" too. Heikki Linnakangas
2005-06-06Modify XLogInsert API to make callers specify whether pages to be backedTom Lane
up have the standard layout with unused space between pd_lower and pd_upper. When this is set, XLogInsert will omit the unused space without bothering to scan it to see if it's zero. That saves time in XLogInsert, and also allows reversion of my earlier patch to make PageRepairFragmentation et al explicitly re-zero freed space. Per suggestion by Heikki Linnakangas.
2005-06-06Remove the mostly-stubbed-out-anyway support routines for WAL UNDO.Tom Lane
That code is never going to be used in the foreseeable future, and where it's more than a stub it's making the redo routines harder to read.
2005-06-06Nab some low-hanging fruit: replace the planner's base_rel_list andTom Lane
other_rel_list with a single array indexed by rangetable index. This reduces find_base_rel from O(N) to O(1) without any real penalty. While find_base_rel isn't one of the major bottlenecks in any profile I've seen so far, it was starting to creep up on the radar screen for complex queries --- so might as well fix it.
2005-06-05Remove planner's private fields from Query struct, and put them intoTom Lane
a new PlannerInfo struct, which is passed around instead of the bare Query in all the planning code. This commit is essentially just a code-beautification exercise, but it does open the door to making larger changes to the planner data structures without having to muck with the widely-known Query struct.
2005-06-05Code for SET/SHOW TIME ZONE with a fixed-interval timezone was notTom Lane
prepared for HAVE_INT64_TIMESTAMP. Per report from Guillaume Beaudoin.
2005-06-05Replace the parser's namespace tree (which formerly had the sameTom Lane
representation as the jointree) with two lists of RTEs, one showing the RTEs accessible by qualified names, and the other showing the RTEs accessible by unqualified names. I think this is conceptually simpler than what we did before, and it's sure a whole lot easier to search. This seems to eliminate the parse-time bottleneck for deeply nested JOIN structures that was exhibited by phil@vodafone.
2005-06-04Back out patch:Bruce Momjian
--------------------------------------------------------------------------- Tom Lane <tgl@sss.pgh.pa.us> writes: > a_ogawa <a_ogawa@hi-ho.ne.jp> writes: > > It is a reasonable idea. However, the majority part of MemSet was not > > able to be avoided by this idea. Because the per-tuple contexts are used > > at the early stage of executor. > > Drat. Well, what about changing that? We could introduce additional > contexts or change the startup behavior so that the ones that are > frequently reset don't have any data in them unless you are working > with pass-by-ref values inside the inner loop. That might be possible. However, I think that we should change only aset.c about this article. I thought further: We can check whether context was used from the last reset even when blocks list is not empty. Please see attached patch.
2005-06-04Add comment for multi-byte computation.Bruce Momjian
2005-06-04Allow kerberos name and username case sensitivity to be specified fromBruce Momjian
postgresql.conf. --------------------------------------------------------------------------- Here's an updated version of the patch, with the following changes: 1) No longer uses "service name" as "application version". It's instead hardcoded as "postgres". It could be argued that this part should be backpatched to 8.0, but it doesn't make a big difference until you can start changing it with GUC / connection parameters. This change only affects kerberos 5, not 4. 2) Now downcases kerberos usernames when the client is running on win32. 3) Adds guc option for "krb_caseins_users" to make the server ignore case mismatch which is required by some KDCs such as Active Directory. Off by default, per discussion with Tom. This change only affects kerberos 5, not 4. 4) Updated so it doesn't conflict with the rendevouz/bonjour patch already in ;-) Magnus Hagander
2005-06-04Tom Lane <tgl@sss.pgh.pa.us> writes:Bruce Momjian
> a_ogawa <a_ogawa@hi-ho.ne.jp> writes: > > It is a reasonable idea. However, the majority part of MemSet was not > > able to be avoided by this idea. Because the per-tuple contexts are used > > at the early stage of executor. > > Drat. Well, what about changing that? We could introduce additional > contexts or change the startup behavior so that the ones that are > frequently reset don't have any data in them unless you are working > with pass-by-ref values inside the inner loop. That might be possible. However, I think that we should change only aset.c about this article. I thought further: We can check whether context was used from the last reset even when blocks list is not empty. Please see attached patch. The effect of the patch that I measured is as follows: o Execution time that executed the SQL ten times. (1)Linux(CPU: Pentium III, Compiler option: -O2) - original: 24.960s - patched : 23.114s (2)Linux(CPU: Pentium 4, Compiler option: -O2) - original: 8.730s - patched : 7.962s (3)Solaris(CPU: Ultra SPARC III, Compiler option: -O2) - original: 37.0s - patched : 33.7s Atsushi Ogawa (a_ogawa)
2005-06-04Change expandRTE() and ResolveNew() back to taking just the singleTom Lane
RTE of interest, rather than the whole rangetable list. This makes the API more understandable and avoids duplicate RTE lookups. This patch reverts no-longer-needed portions of my patch of 2004-08-19.
2005-06-04Improve readability of config location params by adding newline.Bruce Momjian
2005-06-04Fix NUMERIC modulus to properly truncate division in computation.Bruce Momjian
Division rounding was causing incorrect results. Test case: test=> SELECT 12345678901234567890 % 123; ?column? ---------- 78 (1 row) Was returning -45.
2005-06-04Remove unused 'printCost' field from ExplainState, and simplify the codeNeil Conway
accordingly (this field was always initialized to true). Patch from Alvaro Herrera.
2005-06-03Revise handling of dropped columns in JOIN alias lists to avoid aTom Lane
performance problem pointed out by phil@vodafone: to wit, we were spending O(N^2) time to check dropped-ness in an N-deep join tree, even in the case where the tree was freshly constructed and couldn't possibly mention any dropped columns. Instead of recursing in get_rte_attribute_is_dropped(), change the data structure definition: the joinaliasvars list of a JOIN RTE must have a NULL Const instead of a Var at any position that references a now-dropped column. This costs nothing during normal parse-rewrite-plan path, and instead we have a linear-time update to make when loading a stored rule that might contain now-dropped columns. While at it, move the responsibility for acquring locks on relations referenced by rules into this separate function (which I therefore chose to call AcquireRewriteLocks). This saves effort --- namely, duplicated lock grabs in parser and rewriter --- in the normal path at a cost of one extra non-locked heap_open() in the stored-rule path; seems a good tradeoff. A fringe benefit is that it is now *much* clearer that we acquire lock on relations referenced in rules before we make any rewriter decisions based on their properties. (I don't know of any bug of that ilk, but it wasn't exactly clear before.)
2005-06-03Just noticed that you can't Query-Cancel a long planner run, becauseTom Lane
no part of the planner did CHECK_FOR_INTERRUPTS(). Add one in a suitably strategic spot.
2005-06-02Push enable/disable of notify and catchup interrupts all the way downTom Lane
to just around the bare recv() call that gets a command from the client. The former placement in PostgresMain was unsafe because the intermediate processing layers (especially SSL) use facilities such as malloc that are not necessarily re-entrant. Per report from counterstorm.com.
2005-06-02The no-lexer-backup speedup hadn't been there a week before somebodyTom Lane
broke it. Maybe we do need an automated check ...
2005-06-02Change CRCs in WAL records from 64bit to 32bit for performance reasons.Tom Lane
Instead of a separate CRC on each backup block, include backup blocks in their parent WAL record's CRC; this is important to ensure that the backup block really goes with the WAL record, ie there was not a page tear right at the start of the backup block. Implement a simple form of compression of backup blocks: drop any run of zeroes starting at pd_lower, so as not to store the unused 'hole' that commonly exists in PG heap and index pages. Tweak PageRepairFragmentation and related routines to ensure they keep the unused space zeroed, so that the above compression method remains effective. All per recent discussions.
2005-06-02Add support for \x hex escapes in backend strings. Octal was alreadyBruce Momjian
supported. This follows the C standard escapes.
2005-06-02Add support for \x hex escapes in COPY.Bruce Momjian
Sergey Ten
2005-06-01Fix log_statement to properly recognize SELECT INTO and CREATE TABLE ASBruce Momjian
and DDL statements. Backpatch fix to 8.0.X. Per report from Murthy Kambhampaty
2005-06-01patternsel() was improperly stripping RelabelType from the derivedTom Lane
expressions it constructed, causing scalarineqsel to become confused if the underlying variable was of a domain type. Per report from Kevin Grittner.
2005-05-31Add test to WAL replay to verify that xl_prev points back to the previousTom Lane
WAL record; this is necessary to be sure we recognize stale WAL records when a WAL page was only partially written during a system crash.
2005-05-31Fix information_schema for OUT and INOUT parameters.Tom Lane
2005-05-31Teach ruleutils to drill down into RECORD-type Vars in the same wayTom Lane
that the parser now can, so that it can reverse-list cases involving FieldSelect from a RECORD Var.
2005-05-31ParseComplexProjection should make use of expandRecordVariable so thatTom Lane
it can handle cases like (foo.x).y where foo is a subquery and x is a function-returning-RECORD RTE in that subquery.
2005-05-30Document get_call_result_type() and friends; mark TypeGetTupleDesc()Tom Lane
and RelationNameGetTupleDesc() as deprecated; remove uses of the latter in the contrib library. Along the way, clean up crosstab() code and documentation a little.
2005-05-30Add support for FUNCTION RTEs to build_physical_tlist(), so that theTom Lane
physical-tlist optimization can be applied to FunctionScan nodes as well as regular tables and SubqueryScans.
2005-05-30When enqueueing after-row triggers for updates of a table with a foreignNeil Conway
key, compare the new and old row versions. If the foreign key column has not changed, we needn't enqueue the trigger, since the update cannot violate the foreign key. This optimization was previously applied in the RI trigger function, but it is more efficient to avoid firing the trigger altogether. Per recent discussion on pgsql-hackers. Also add a regression test for some unintuitive foreign key behavior, and refactor some code that deals with the OIDs of the various RI trigger functions.
2005-05-30Create separate ON INSERT and ON UPDATE triggers on tables with foreignNeil Conway
keys, rather than a single trigger for both events. This should not change functionality, but it is more consistent: previously, there were trigger functions for both "check_insert" and "check_update", but the former was used for both events. Bump catalog version number (not strictly necessary, but best to be cautious).